String
String結構
單值緩存
SET key value
GET key
對象緩存
1)SET user:1 value(json格式數據)
2)MSET user:1:name sp user:1:balance 1994
MGET user:1:name user:1:balance
分佈式鎖
SETNX product:10001 true //返回1代表獲取鎖成功
SETNX product:10001 true //返回0代表獲取鎖失敗
。。。執行業務操作
DEL product:10001 //執行完業務釋放鎖
SET product:10001 true ex 10 nx //防止程序意外終止導致死鎖
String 應用場景
1.計數器
INCR article:readcount:{文章id}
GET article:readcount:{文章id}
2.Web集羣session共享
spring session + redis實現session共享
3.分佈式系統全局序列號
INCRBY orderId 1000
Hash結構
Hash常用操作
hset key field value //存儲一個哈希表key的鍵值
hget key field //獲取值
hsetnx key field value //存儲一個不存在的哈希表key的鍵值
HMSET key field vlue [field value ...] //在一個哈希表中存儲多個鍵值對
hmget key field value [field value ...] //批量設置或獲取field-value
field hdel key field [field ...] //刪除[批量]
hlen key //計算field的個數
hgetall key //獲取所有的field-value
hexists key field //判斷field是否存在
hkeys key //獲取所有field
hvals key //獲取所有的value
//開發提示:如果一定要獲取全部的field-value,可以使用hscan命令,該命令會漸進式遍歷哈希類型
//hincrby hincrby float
hstrlen key field //計算value的字符串長度
Hash應用場景
對象緩存
//設置 user對象 id爲1 的name屬性值爲 sp,balance屬性值爲111
HMSET user 1:name sp 1:balance 111
//獲取 user對象 id爲1 的屬性爲name、balance的值
HMGET user 1:name 1:balance
電商購物車
1)以用戶id爲key
2)商品id爲field
3)商品數量爲value
Hash結構優缺點
優點:
1.同類數據歸類整合儲存,方便數據管理
2.相比String操作消耗內存與cpu更小
3.相比String儲存更節省空間
缺點:
1.過期功能不能使用在field上,只能用在key上
2.Redis集羣架構下不適合大規模使用
List結構
List常用操作
LPUSH key value [value ...] //將一個或多個值value插入到key列表的表頭(最左邊)
RPUSH key value [value...] //將一個或多個值value插入到key列表的表尾(最右邊)
LPOP key //移除並返回key列表的頭元素
RPOP key //移除並返回key列表的尾元素
LRANGE key start stop //返回列表key中指定區間內的元素,區間以偏移量start和stop指定
BLPOP key [key...] timeout //從key列表表頭彈出一個元素,若列表中沒有元素,阻塞等待timeout秒,如果timeout = 0,一直阻塞等待
BRPOP key[key...] timeout //從key列表表尾彈出一個元素,若列表中沒有元素,阻塞等待timeout秒,如果timeout = 0,一直阻塞等待
List應用場景
常用數據結構
Stack(棧) = LPUSH + LPOP ->FILO
Queue(隊列) = LPUSH + RPOP
Blocking MQ(阻塞隊列) = LPUSH + BRPOP
微博消息和微信公衆號消息
Set結構
Set常用操作
SADD key member [member...] //往集合key中存入元素,元素存在則忽略,若 key不存在則新建
SREM key member [member...] //從集合key中刪除元素
SMEMBERS key //獲取集合key中所有元素
SCARD key //獲取集合key中的元素個數
SISMEMBER key member //判斷member元素是否存在於集合key中
SRANDMEMBER key [count] //從集合key中選出count個元素,元素不從key中刪除
SPOP key [count] //從結合key中選出count個元素,元素從key中刪除
Set運算操作
SINTER key [key...] //交集運算
SINTERSTORE destination key [key...] //將交集結果存入新集合destination中
SUNION key [key...] //並集運算
SUNIONSTORE destionation key [key...] //將並集結果存入新集合destination中
SDIFF key [key...] //差集運算
SDIFFSTORE destionation key [key...] //將差集結果存入新集合destionation中
Set應用場景
微信抽獎小程序
1)點擊參與抽獎加入集合
SADD key {userID}
2)查看參與抽獎所有用戶
SMEMBERS key
3)抽獎count名中獎者
SRANDMEMBER key [count] / SPOP key [count]
微信微博點贊、收藏、標籤
1)點贊
SADD like:{消息ID} {用戶ID}
2)取消點贊
SREM like:{消息ID} {用戶ID}
3)檢查用戶是否點過贊
SISMEMBER like:{消息ID} {用戶ID}
4)獲取點讚的用戶列表
SMEMBERS like:{消息ID}
5)獲取點贊用戶數
SCARD like:{消息ID}
集合操作
集合操作實現微信微博關注模型
ZSet有序集合結構
ZSet常用操作
ZADD key score member [[score member]...] //往有序集合key中帶入分值元素
ZREM key member[member...] //從有序集合key中刪除元素
ZSCORE key member //返回有序集合key中元素member的分值
ZINCRBY key increment member //返回有序集合key中元素member的分值加上inrement
ZCARD key //返回有序集合key中元素個數
ZRANGE key start stop [WITHSCORES] //正序獲取有序集合key從start下標到stop下標的元素
ZREVRANGE key start stop [WITHSCORES] //倒序獲取有序集合key從start下標到stop下標的元素
Zset集合操作
ZUNIONSTORE destkey numkeys key [key...] //並集計算
ZINTERSTORE destkey numkeys key [key...] //交集運算
Redis更多應用場景
微信、微博、陌陌<附近的人>
微信<搖一搖><搶紅包>
滴滴打車、摩拜單車<附近的車>
美團和餓了麼<附近的餐館>
搜索自動補全