一. 基本數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)類型
string, hash, list, set, zsetString 類型
(1)基本操作
SET key value. // 存入字符串鍵值對
MSET key value [key value ...] // 批量存儲字符串鍵值對
GET key // 獲取一個字符串鍵值
DEL key [key ...] // 刪除一個鍵
EXPIRE key seconds // 設(shè)置一個鍵的過期時間(秒)
(2)原子操作
INCR key // 將key中儲存的數(shù)字值加1
DECR key // 將key中儲存的數(shù)字值減1
INCRBY key increment // 將key所儲存的值加上increment
DECRBY key decrement // 將key所儲存的值減去decrement
(3)對象緩存
SET user:1 value(json格式數(shù)據(jù))
(4)分布式鎖
SETNX product:10001 true //返回1代表獲取鎖成功
SETNX product:10001 true //返回0代表獲取鎖失敗
。。。
執(zhí)行業(yè)務(wù)操作
DEL product:10001 //執(zhí)行完業(yè)務(wù)釋放鎖
SET product:10001 true ex 10 nx //防止程序意外終止導(dǎo)致死鎖
(5)應(yīng)用場景
- 計算器:INCR article:readcount:{文章id}
- 分布式系統(tǒng)全局序列號:INCRBY orderId 1000
- Hash類型
(1)常規(guī)操作
HSET key field value // 存儲一個哈希表key的鍵值
HGET key field //獲取哈希表key對應(yīng)的field鍵值
HMGET key field [field ...] //批量獲取哈希表key中多個field鍵值
HGETALL key //返回哈希表key中所有的鍵值
(2)應(yīng)用場景
- 對象緩存:HMSET user {userId}:name zhuge{userId}:balance 1888
- 電商購物車:
添加商品>hset cart:1001 10088 1
增加數(shù)量>hincrby cart:1001 10088 1
商品總數(shù)>hlen cart:1001
刪除商品>hdel cart:1001 10088
獲取購物車所有商品>hgetall cart:1001
(3)hash結(jié)構(gòu)優(yōu)缺點 - 優(yōu)點
1)同類數(shù)據(jù)歸類整合儲存,方便數(shù)據(jù)管理
2)相比string操作消耗內(nèi)存與cpu更小
3)相比string儲存更節(jié)省空間 - 缺點
1)過期功能不能使用在field上,只能用在key上
2)Redis集群架構(gòu)下不適合大規(guī)模使用
List結(jié)構(gòu)
(1)常用操作
LPUSH key value [value ...] //將一個或多個值value插入到key列表的表頭(最左邊)
RPUSH key value [value ...] //將一個或多個值value插入到key列表的表尾(最右邊)
LRANGE key start stop //返回列表key中指定區(qū)間內(nèi)的元素
(2)組合成常用數(shù)據(jù)結(jié)構(gòu)
Stack = LPUSH + LPOP
Queue = LPUSH + RPOP
Blocking MQ = LPUSH + BRPOP
(3)應(yīng)用場景
微博消息及微信公眾號
LPUSH msg:{諸葛老師-ID} 10018
LPUSH msg:{諸葛老師-ID} 10086
LRANGE msg:{諸葛老師-ID} 0 4-
Set類型
(1)常規(guī)操作
SADD key member [member ...] //往集合key中存入元素
SMEMBERS key //獲取集合key中所有元素
SCARD key //獲取集合key的元素個數(shù)
(2)Set集合運算
Set集合運算.png
- 求交集:
SINTER set1 set2 set3 -> {c} - 求并集:
SUNION set1 set2 set3 -> {a, b, c, d, e} - 求差集:
SDIFF set1 set2 set3 -> {a, b, c} - {b, c, d, e} = {a}
(3)應(yīng)用場景 - 微信抽獎小程序
1)點擊參與抽獎
加入集合
SADD key {userlD}
2)查看參與抽獎
所有用戶
SMEMBERS key
3)抽取count名中獎?wù)?br> SRANDMEMBER key [count] / SPOP key [count] - 微博微信點贊收藏
1)點贊:SADD like:{消息ID} {用戶ID}
2)獲取點贊的用戶列表:SMEMBERS like:{消息ID}
3)獲取點贊用戶數(shù):SCARD like:{消息ID}
- Zset有序集合
為每一個插入元素帶上分值,底層使用了跳表實現(xiàn)
(1)常規(guī)操作
ZADD key score member [[score member]…] //往有序集合key中加入帶分值元素
ZREM key member [member…] //從有序集合key中刪除元素
ZSCORE key member //返回有序集合key中元素member的分值
(2)集合操作
ZUNIONSTORE destkey numkeys key [key ...] //并集計算
ZINTERSTORE destkey numkeys key [key…] //交集計算
(3)應(yīng)用場景
-
排場榜
排場榜.png
redis I/O多路復(fù)用模型


