一文搞定Redis五大數據類型及應用場景


本文學習知識點

redis五大數據類型數據類型:string、hash、list、set、sorted_set

五大類型各自的應用場景

 

@TOC

 

1. string類型

 

1-1 string類型數據的基本操作

 

添加 / 修改數據:set key value

 

獲取數據:get key

 

刪除數據:del key

 

添加 / 修改多個數據:mset key value key1 value1

 

獲取多個數據:mget key key1

 

追加信息到原始數據后邊(不存在時則添加):append key value

 

1-2 string類型 增減操作

 

設置數值增加指定范圍的值:incr key 默認每次加1 | incrby key value 每次新增value

設置數據減少指定范圍:decr key | decrby key value 跟新增是一回事

 

應用場景

 

控制數據庫表主鍵id,為數據庫表提供主鍵生成策略,保證數據表主鍵的一致性。

 

1-3 string類型 時效操作

 

設置過期時間:setex key seconds value

 

應用場景

 

實現限制時間投票功能:例如一個微信一個小時可以投一次

實現熱點信息:例如電商行業熱門商品、新聞網站熱門新聞

 

1-4 string類型的應用場景

 

微博大V主頁高頻的訪問,對於粉絲數、關注數、微博數都需要時時更新。這個就屬於高頻信息了,我們就可以使用redis的string類型來解決

在redis中為大V設定用戶信息,以用戶主鍵和屬性為鍵值,以下為實現案例。

在這里需要簡單的說一下key的命名規則:以表名+主鍵+主鍵值+字段 :字段值。以這樣的規則來命名就可以很好的來管理我們的鍵值。

 

我們還可以使用另外一種方式來實現,就是鍵后邊直接跟一個結構,例如

以上的倆種方式都是可以實現的,只是第一種可以很方便的對任意一個值進行管理,第二種是改一個都得改一次,看業務場景,定時刷新就行。

 

2. hash類型

 

2-1 hash類型數據的基本操作

 

添加 / 修改數據:hset key field value

 

獲取數據:hget key field    |  hgetall key

 

刪除數據:hdel key field field1

 

添加 / 修改多個數據:hmset key field value field1 value1

 

獲取多個數據:hmget key field field1

 

獲取表中字段數量:hlen key

 

獲取表中是否存在某個字段:hexists key field

 

2-2 hash類型數據的擴展操作

 

獲取hash表中所有的字段值:hkeys key

 

獲取hash表中所有的字段值:hvals key

 

設置指定字段的數值增加指定范圍的值:hincrby key field increment   |  hincrbyfloat key field increment

 

2-3 hash業務場景之購物車

 

此圖來源於網絡非自制,只是模擬購物車場景

在上圖中,我們可以看到購物車里的信息,下來咱們使用redis來對這個購物車的實現。

 

這里實現了一個添加購物車和獲取購物車,keys的命名為  表名+主鍵+主鍵值

在上圖中,我們會有一個問題就是商品信息存儲會大量重復,所有我們也需要將商品單獨給一直hash。如下圖,只存儲商品id

這里提供了倆種設置方式,一種是設置多個字段,一種是直接存儲為json。信息不經常變動的話可以使用json

給大家在提供一個方法hsetnx key field value,如果有則不進行添加,沒有則添加。這個功能就使用在不同的用戶添加同樣的商品時不會執行覆蓋和無用操作

 

3. list類型

 

數據存儲需求:存儲多個數據,並對數據進行存儲空間的順序進行區分

需要的數據結構:一個存儲空間保存多個數據,且通過數據可以體現進入順序

list類型:保存多個數據,底層使用雙向鏈表存儲結構實現

 

3-1 list類型數據的基本操作

 

添加 / 修改數據:lpush key value value1   |  rpush key value value1

 

獲取數據:lrange key start end   | lindex key index  | llen key

 

刪除數據:rpop key | lpop key

 

 

3-2 list類型數據的擴展操作

 

在規定時間內獲取並移除數據:blpop key1 key2 timeout | brpop key1 key2 timeout

 

這個功能簡單的寫一個案例,容易理解

 

左邊這個終端指令執行后會等待30秒的時間返回刪除的數據

 

當右邊的添加指令執行后左邊會直接返回返回刪除的數據

 

3-3 list業務場景

 

在上邊我們知道了list的基礎操作  執行  lpop key 或者 rpop key可以從做或者從右進行刪除,但是現在有個場景是朋友圈點贊業務,然后從中間取消數據。案例如下圖

 

我們先往list5里邊添加  a b c d

然后移除c

在查看就剩下a b d了

 

4. set類型

 

新的存儲需求:存儲大量的數據,在查詢方便提供更高的效率

需要的存儲結構:能夠保存大量的數據,高效的內部存儲機制,便於查詢

set類型:與hash存儲結構完全相同,僅存儲鍵,不存儲值(nil),並且值是不允許重復的

 

 

4-1 set類型數據的基本操作

 

添加 / 修改數據:sadd key member member1

 

獲取數據:smembers key

 

刪除數據:srem key member1

 

獲取集合數據總量:scard key

 

判斷集合中是否包含指定數據:sismember key member

 

 

4-2 set類型數據擴展操作

 

隨機獲取集合中指定數量的數據:srandmember key count

 

隨機獲取集合中某個數據並將改數據集移除集合:spop key

 

4-3 set類型業務場景推薦信息

 

隨機推送熱點信息、熱點新聞、熱賣旅游、應用app推薦、關注推薦等

 

由於最近咔咔在寫discuz,這個案例就以實現關注推薦。

 

案例一:根據一定的推薦機制往set里邊存放對應的用戶,然后每次進行隨機獲取2位需要推薦的用戶

 

 

案例二:根據一定的推薦機制往set里邊存放對應的用戶,然后根據日期每天推薦的用戶都不能重復

 

 

4-4 set類型業務場景挖掘用戶關系

 

倆個集合的交、並、差集

 

sinter key key1 sunion key key1 sdiff key key1

 

倆個集合的交、並、差集並存儲到指定集合中

 

sinterstore destination key1 key2 sunionstore destination key1 key2 sdiffstore destination key1 key2

 

案例:我們需要挖掘一個信息的共同好友。例如微信公眾號的共同關注好友數量、QQ添加新好友的推薦機制、深度挖掘用戶直接的聯系

 

就根據上述案例,我們可以使用差集來實現qq的有可能認識的好友。

 

4-5 set類型業務場景 實現網站的PV  UV  IP的記錄

 

PV直接使用string類型的incr統計即可

 

UV和IP都是獨立不重復的,使用set來操作。

 

在上邊我們知道set有一個特性就是不能重復,我們就可以根據這一點來輕松實現這個功能。然后使用scard key 來統計數量。

 

至於UV是獨立訪客,使用本地的cookie來實現就可以,方法一樣把cookie傳給redis做記錄即可

 

5. sorted_set類型

 

在之前的四個類型中都不支持排序的,下來咱們看的sorted_set類型是既支持存儲大數據,也支持排序功能

 

5-1. sorted_set類型基本操作

 

添加數據:zadd key score member

 

獲取數據:zrange key start stop | zrevrange key start stop

 

刪除數據:zrem key member

 

按條件獲取數據:zrangebyscore key min max limit | zrevrangescore key max min

 

條件刪除數據:zremrangebyrank key start stop | zremrangebyscore key min max

 

獲取集合數據總量:zcard key | zcount key min max

 

集合交、並操作:zinterstore destination numkeys key | zunionstore destination numkeys key(這個指令就不做演示了,可以自己查看文檔。跟set有點類似,只不過會把所有交集的和給加起來。然后這里邊有個numkeys這個參數是一共幾個key進行計算  后邊的key就需要幾個)

 

獲取數據對應的索引:zrank key member | zrevrank key member

 

socre值獲取與修改:zscore key member | zincrby key increment member

 

總結

 

以上就是redis數據類型的簡單介紹和具體應用,在后文中會針對具體需求在進行實戰。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM