首頁  >  文章  >  資料庫  >  一文搞定Redis五大資料類型及應用場景

一文搞定Redis五大資料類型及應用場景

咔咔
咔咔原創
2020-05-25 16:53:141834瀏覽

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五大資料類型及應用場景
在redis中為大V設定使用者訊息,以使用者主鍵和屬性為鍵值,以下為實現案例。
一文搞定Redis五大資料類型及應用場景
在這裡需要簡單的說一下key的命名規則:以表名 主鍵 主鍵值 欄位 :欄位值。以這樣的規則來命名就可以很好的來管理我們的鍵值。

我們也可以用另一種方​​式來實現,就是鍵後邊直接跟一個結構,例如
一文搞定Redis五大資料類型及應用場景
以上的兩個方式都是可以實現的,只是第一種可以很方便的對任意一個值進行管理,第二種是改一個都得改一次,看業務場景,定時刷新就行。

2. hash型別

#2-1 hash型別資料的基本運算

新增/ 修改資料:hset key field value

取得資料:hget key field | hgetall key

刪除資料:hdel key field field1

新增/ 修改多個資料:hmset key field value field1 值1

## 取得多個資料:

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五大資料類型及應用場景
在上圖中,我們可以看到購物車裡的信息,下來咱們使用redis來對這個購物車的實現。

這裡實作了一個新增購物車和取得購物車,keys的命名為表名主鍵主鍵值
一文搞定Redis五大資料類型及應用場景
在上圖中,我們會有一個問題就是商品資訊儲存會大量重複,所有我們也需要將商品單獨給一直hash。如下圖,只儲存商品id
一文搞定Redis五大資料類型及應用場景
這裡提供了倆種設定方式,一種是設定多個字段,一種是直接儲存為json。資訊不常變動的話可以使用json
一文搞定Redis五大資料類型及應用場景
給大家在提供一個方法hsetnx key field value,如果有則不進行添加,沒有則添加。這個功能就使用在不同的使用者新增相同的商品時不會執行覆寫和無用操作
一文搞定Redis五大資料類型及應用場景

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

一文搞定Redis五大資料類型及應用場景

############################################################### ###3-2 list類型資料的擴充操作######

在規定時間內取得並移除資料:blpop key1 key2 timeout | brpop key1 key2 timeout

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

左邊這個終端指令執行後會等待30秒的時間返回刪除的資料

當右邊的新增指令執行後左邊會直接回傳回傳刪除的資料


一文搞定Redis五大資料類型及應用場景

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

我們先往list5裡邊加入a b c d
然後移除c
在檢視就剩下a b d了
一文搞定Redis五大資料類型及應用場景



一文搞定Redis五大資料類型及應用場景

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

需要的儲存結構:能夠保存大量的數據,高效的內部儲存機制,便於查詢set類型:與hash儲存結構完全相同,僅儲存鍵,不儲存值(nil),且值是不允許重複的

# #######################4-1 set類型資料的基本操作############新增/ 修改資料:# ##sadd key member member1#########

取得資料:smembers key

#刪除資料:srem key member1

#取得集合資料總量:scard key

#判斷集合中是否包含指定資料:sismember key member

一文搞定Redis五大資料類型及應用場景

#

4-2 set類型資料擴充運算

#隨機取得集合中指定數量的資料:srandmember key count

#隨機取得集合中某個資料並將改資料集移除集合:spop key

4-3 set類型業務場景推薦資訊

隨機推送熱點資訊、熱點新聞、熱賣旅遊、應用app推薦、關注推薦等

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

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

一文搞定Redis五大資料類型及應用場景

#案例二:根據一定的推薦機制在set裡邊存放對應的用戶,然後根據日期每天推薦的用戶都不能重複

一文搞定Redis五大資料類型及應用場景

4-4 set類型業務場景挖掘使用者關係

兩個集合的交、並且、差集

sinter key key1
sunion key key1
sdiff key key1

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

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

一文搞定Redis五大資料類型及應用場景
案例:我们需要挖掘一个信息的共同好友。例如微信公众号的共同关注好友数量、QQ添加新好友的推荐机制、深度挖掘用户直接的联系

就根据上述案例,我们可以使用差集来实现qq的有可能认识的好友。

4-5 set类型业务场景 实现网站的PV UV IP的记录

PV直接使用string类型的incr统计即可

UV和IP都是独立不重复的,使用set来操作。

在上边我们知道set有一个特性就是不能重复,我们就可以根据这一点来轻松实现这个功能。然后使用scard key 来统计数量。

至於UV是獨立訪客,使用本地的cookie來實作就可以,方法一樣把cookie傳給redis做記錄即可
一文搞定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

一文搞定Redis五大資料類型及應用場景
#依條件取得資料: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資料型態的簡單介紹與具體應用,後文會針對具體需求在進行實戰。 ######

以上是一文搞定Redis五大資料類型及應用場景的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn