特性
key-value型
運(yùn)行在內(nèi)存中带膜,數(shù)據(jù)量不能大于硬件內(nèi)存吩谦,但是支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中
支持string(字符串)膝藕,hash(哈希)式廷,list(列表),set(集合)及zset(sorted set:有序集合)
極高的性能
所有操作都是原子性的
支持 publish/subscribe, 通知, key 過(guò)期等等特性
數(shù)據(jù)結(jié)構(gòu)
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
每個(gè) hash 可以存儲(chǔ) 2^32 -1 鍵值對(duì)
List
順序的雙向列表芭挽,可以從頭部或尾部插入滑废,存取速度快但是查詢慢
操作:LPUSH、RPUSH袜爪、LPOP策严、RPOP、LRANGE饿敲、LREM(刪除)
LPUSH list1 redis
LRANGE list1 0 10
Set
Set是string類型的無(wú)序集合妻导。添加一個(gè) string 元素到 key 對(duì)應(yīng)的 set 集合中,成功返回1怀各,如果元素已經(jīng)在集合中返回 0倔韭,如果 key 對(duì)應(yīng)的 set 不存在則返回錯(cuò)誤。
SET可以進(jìn)行差集SDIFF瓢对、交集SINTER寿酌、并集SUNION的運(yùn)算。
SADD set1 a b
SREM set1 a
SMEMBERS set1
ZSet(sorted set)
有序集合硕蛹,不允許重復(fù)醇疼,操作類似Set
ZADD runoob 0 redis
ZRANGEBYSCORE runoob 0 1000
命令
service redis start/stop/restart
service redis status
redis-cli 進(jìn)入數(shù)據(jù)庫(kù),顯示127.0.0.1:6379 本機(jī)與服務(wù)端口6379
config get *
config set [xxx] [xxx]
select [index] 選擇數(shù)據(jù)庫(kù)(默認(rèn)16個(gè))
set [name] [value]
get [name]
keys * (pattern匹配法焰, 比如keys sess*)
get [key]
del [key]
事務(wù)
MULTI 開(kāi)始事務(wù)
... 寫(xiě)入命令
EXEC 執(zhí)行并結(jié)束事務(wù)
redis的事務(wù)不是原子的秧荆,一條命令失敗了其他命令會(huì)繼續(xù)執(zhí)行,不會(huì)回滾
備份到磁盤
SAVE
應(yīng)用->保存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); //沒(méi)有參數(shù)就使用默認(rèn)值
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();
});
}
主從數(shù)據(jù)庫(kù)配置
1卵蛉、主數(shù)據(jù)庫(kù)(master)和從數(shù)據(jù)庫(kù)(slave)颁股,主數(shù)據(jù)庫(kù)可以進(jìn)行讀寫(xiě)操作,當(dāng)發(fā)生寫(xiě)操作的時(shí)候自動(dòng)將數(shù)據(jù)同步到從數(shù)據(jù)庫(kù)傻丝,而從數(shù)據(jù)庫(kù)一般是只讀的甘有,并接收主數(shù)據(jù)庫(kù)同步過(guò)來(lái)的數(shù)據(jù)
2、復(fù)制功能可以很好的實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫(xiě)分離葡缰,提高服務(wù)器的負(fù)載能力亏掀。主數(shù)據(jù)庫(kù)主要進(jìn)行寫(xiě)操作允睹,而從數(shù)據(jù)庫(kù)負(fù)責(zé)讀操作。
配置:在從庫(kù)配置中加入slaveof masterHost masterPort來(lái)指定相應(yīng)的主庫(kù)
//主節(jié)點(diǎn):192.168.33.130
//從節(jié)點(diǎn):192.168.33.131
slaveof 192.168.33.130 6379
redis上的信息: