特性
key-value型
运行在内存中,数据量不能大于硬件内存,但是支持数据的持久化,可以将内存中的数据保存在磁盘中
支持string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
极高的性能
所有操作都是原子性的
支持 publish/subscribe, 通知, key 过期等等特性
数据结构
String
SET name value
GET name
MSET MGET
Hash
HSET myhash field "Hello"
HGET myhash field
HMSET myhash field1 "Hello" field2 "Hello World"
HGETALL myhash
HDEL myhash field1
HKEYS myhash
HVALS myhash
HLEN myhash
每个 hash 可以存储 2^32 -1 键值对
List
顺序的双向列表,可以从头部或尾部插入,存取速度快但是查询慢
操作:LPUSH、RPUSH、LPOP、RPOP、LRANGE、LREM(删除)
LPUSH list1 redis
LRANGE list1 0 10
Set
Set是string类型的无序集合。添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。
SET可以进行差集SDIFF、交集SINTER、并集SUNION的运算。
SADD set1 a b
SREM set1 a
SMEMBERS set1
ZSet(sorted set)
有序集合,不允许重复,操作类似Set
ZADD runoob 0 redis
ZRANGEBYSCORE runoob 0 1000
命令
service redis start/stop/restart
service redis status
redis-cli 进入数据库,显示127.0.0.1:6379 本机与服务端口6379
config get *
config set [xxx] [xxx]
select [index] 选择数据库(默认16个)
set [name] [value]
get [name]
keys * (pattern匹配, 比如keys sess*)
get [key]
del [key]
事务
MULTI 开始事务
... 写入命令
EXEC 执行并结束事务
redis的事务不是原子的,一条命令失败了其他命令会继续执行,不会回滚
备份到磁盘
SAVE
应用->保存session
1、例子
key: sess:s735_6AyQsxkQY3Byg38eOmzgLgL5WyT
value: "{"cookie":{"originalMaxAge":1800000,"expires":"2019-01-11T11:03:08.693Z","httpOnly":true,"path":"/"},"user_id":1,"admin_name":"admin","user_type":"local","role":1,"csrfSecret":"3Y8KsI3eFhkUOXeFlhx79uAf"}"
2、在NodeJS中使用
https://github.com/NodeRedis/node_redis](https://github.com/NodeRedis/node_redis
var redis = require("redis");
var client = redis.createClient(port,host); //没有参数就使用默认值
client.get(key);
client.keys(pattern);
client.set([key,value])
3、session持久化
var express = require('express');
var session = require('express-session');
var redisStore = require('connect-redis')(session);
const sessionTimeout = 30*60*1000;
module.exports = function(app, envConfig)
app.use(bodyParser.json({limit: '100mb'}));
app.use(bodyParser.urlencoded({ limit: '100mb', extended: true }));
app.use(cookieParser());
app.use(multipartMiddleware);
app.use(validator());
app.set('trust proxy', 1);
app.use(session({
name: "exsessionid",
secret: "keyboard cat",
cookie: {maxAge: sessionTimeout},
resave: true,
saveUninitialized: false,
store: new redisStore(),
rolling: true
}));
app.use(function(req, res, next){
res.set({'Pragma': 'no-cache'});
next();
});
}
主从数据库配置
1、主数据库(master)和从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据
2、复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。
配置:在从库配置中加入slaveof masterHost masterPort来指定相应的主库
//主节点:192.168.33.130
//从节点:192.168.33.131
slaveof 192.168.33.130 6379
redis上的信息: