Redis五種數據結構及應用場景

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更多應用場景

微信、微博、陌陌<附近的人>

微信<搖一搖><搶紅包>

滴滴打車、摩拜單車<附近的車>

美團和餓了麼<附近的餐館>

搜索自動補全

布隆過濾器

 

 

 

發佈了81 篇原創文章 · 獲贊 9 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章