一文搞定Redis五大資料類型及應用場景
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,為資料庫表提供主鍵產生策略,確保資料表主鍵的一致性。
設定過期時間:setex key seconds value
應用場景
實作限制時間投票功能:例如一個微信一個小時可以投一次
實作熱點資訊:例如電商業界熱門商品、新聞網站熱門新聞
微博大V首頁高頻的訪問,對於粉絲數、關注數、微博數都需要時時更新。這個就屬於高頻訊息了,我們就可以使用redis的string類型來解決
在redis中為大V設定使用者訊息,以使用者主鍵和屬性為鍵值,以下為實現案例。
在這裡需要簡單的說一下key的命名規則:以表名 主鍵 主鍵值 欄位 :欄位值。以這樣的規則來命名就可以很好的來管理我們的鍵值。
我們也可以用另一種方式來實現,就是鍵後邊直接跟一個結構,例如
以上的兩個方式都是可以實現的,只是第一種可以很方便的對任意一個值進行管理,第二種是改一個都得改一次,看業務場景,定時刷新就行。
新增/ 修改資料: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
此圖來自網路非自製,只是模擬購物車場景
在上圖中,我們可以看到購物車裡的信息,下來咱們使用redis來對這個購物車的實現。
這裡實作了一個新增購物車和取得購物車,keys的命名為表名主鍵主鍵值
在上圖中,我們會有一個問題就是商品資訊儲存會大量重複,所有我們也需要將商品單獨給一直hash。如下圖,只儲存商品id
這裡提供了倆種設定方式,一種是設定多個字段,一種是直接儲存為json。資訊不常變動的話可以使用json
給大家在提供一個方法hsetnx key field value
,如果有則不進行添加,沒有則添加。這個功能就使用在不同的使用者新增相同的商品時不會執行覆寫和無用操作
資料儲存需求:儲存多個數據,並對資料進行儲存空間的順序進行區分
所需的資料結構:一個儲存空間保存多個數據,並且透過資料可以體現進入順序
list類型:保存多個數據,底層使用雙向鍊錶儲存結構實作
新增/ 修改資料:lpush key value value1
| rpush key value value1
取得資料:lrange key start end
| lindex key index
| llen key
##刪除資料:rpop key
| lpop key
在規定時間內取得並移除資料:blpop key1 key2 timeout | brpop key1 key2 timeout
我們先往list5裡邊加入a b c d
然後移除c
在檢視就剩下a b d了
需要的儲存結構:能夠保存大量的數據,高效的內部儲存機制,便於查詢set類型:與hash儲存結構完全相同,僅儲存鍵,不儲存值(nil),且值是不允許重複的
取得資料:smembers key
#刪除資料:srem key member1
#取得集合資料總量:scard key
#判斷集合中是否包含指定資料:sismember key member
#隨機取得集合中指定數量的資料:srandmember key count
#隨機取得集合中某個資料並將改資料集移除集合:spop key
隨機推送熱點資訊、熱點新聞、熱賣旅遊、應用app推薦、關注推薦等
由於最近咔咔在寫discuz,這個案例就以實現關注推薦。
案例一:根據一定的推薦機制在set裡邊存放對應的用戶,然後每次進行隨機獲取2位需要推薦的用戶
#案例二:根據一定的推薦機制在set裡邊存放對應的用戶,然後根據日期每天推薦的用戶都不能重複
兩個集合的交、並且、差集
sinter key key1 sunion key key1 sdiff key key1
兩個集合的交、並、差集並儲存到指定集合中
sinterstore destination key1 key2 sunionstore destination key1 key2 sdiffstore destination key1 key2
案例:我们需要挖掘一个信息的共同好友。例如微信公众号的共同关注好友数量、QQ添加新好友的推荐机制、深度挖掘用户直接的联系
就根据上述案例,我们可以使用差集来实现qq的有可能认识的好友。
PV直接使用string类型的incr统计即可
UV和IP都是独立不重复的,使用set来操作。
在上边我们知道set有一个特性就是不能重复,我们就可以根据这一点来轻松实现这个功能。然后使用scard key 来统计数量。
至於UV是獨立訪客,使用本地的cookie來實作就可以,方法一樣把cookie傳給redis做記錄即可
在之前的四個類型中都不支持排序的,下來咱們看的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
集合交、並操作: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五大資料類型及應用場景的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

啟動 Redis 服務器的步驟包括:根據操作系統安裝 Redis。通過 redis-server(Linux/macOS)或 redis-server.exe(Windows)啟動 Redis 服務。使用 redis-cli ping(Linux/macOS)或 redis-cli.exe ping(Windows)命令檢查服務狀態。使用 Redis 客戶端,如 redis-cli、Python 或 Node.js,訪問服務器。

使用Redis進行鎖操作需要通過SETNX命令獲取鎖,然後使用EXPIRE命令設置過期時間。具體步驟為:(1) 使用SETNX命令嘗試設置一個鍵值對;(2) 使用EXPIRE命令為鎖設置過期時間;(3) 當不再需要鎖時,使用DEL命令刪除該鎖。

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

Redis 使用哈希表存儲數據,支持字符串、列表、哈希表、集合和有序集合等數據結構。 Redis 通過快照 (RDB) 和追加只寫 (AOF) 機制持久化數據。 Redis 使用主從復制來提高數據可用性。 Redis 使用單線程事件循環處理連接和命令,保證數據原子性和一致性。 Redis 為鍵設置過期時間,並使用 lazy 刪除機制刪除過期鍵。

理解 Redis 源碼的最佳方法是逐步進行:熟悉 Redis 基礎知識。選擇一個特定的模塊或功能作為起點。從模塊或功能的入口點開始,逐行查看代碼。通過函數調用鏈查看代碼。熟悉 Redis 使用的底層數據結構。識別 Redis 使用的算法。
