redis 常見數據結構以及使用場景


1、String:String數據結構是簡單的key-value類型,value其實不僅可以是String,也可以是數字。

常用命令: set,get,decr,incr,mget 等。

應用場景:常規key-value緩存應用;常規計數:微博數,粉絲數等。

RocketMQ消息冪等。

 

 

2、hash: Hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象,后續操作的時候,可以直接僅僅修改這個對象中的某個字段的值。

常用命令:hget,hset,hgetall 等。

應用場景:比如可以Hash數據結構來存儲用戶信息,商品信息等等。比如下面就用hash 類型存放了本人的一些信息:

key=JavaUser293847
value={
  “id”: 1,
  “name”: “SnailClimb”,
  “age”: 22,
  “location”: “Wuhan, Hubei”
}

 

3、List:list 就是鏈表,Redis list 的實現為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內存開銷。

Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)

一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)。

key=sss
value={ hah, sonw, wek}

常用命令: lpush,rpush,lpop,rpop,lrange等

應用場景:

(1)Redis list 的應用場景非常多,也是Redis最重要的數據結構之一,比如微博的關注列表,粉絲列表,消息列表等功能都可以用Redis的 list 結構來實現。 另外可以通過 lrange 命令,就是從某個元素開始讀取多少個元素,可以基於 list 實現分頁查詢,這個很棒的一個功能,基於 redis 實現簡單的高性能分頁,可以做類似微博那種下拉不斷分頁的東西(一頁一頁的往下走),性能高。

(2)使用redis的lst來實現緩存用戶最近瀏覽商品:https://blog.csdn.net/qq_37107280/article/details/77894680

 

4、Set:Set 對外提供的功能與list類似是一個列表的功能,特殊之處在於 set 是可以自動排重的。當你需要存儲一個列表數據,又不希望出現重復數據時,set是一個很好的選擇,並且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。可以基於 set 輕易實現交集、並集、差集的操作。

Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重復的數據。

Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。

集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

key=sss
value={ hah, sonw, wek}

常用命令:sadd,spop,smembers,sunion 等

應用場景:在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。Redis可以非常方便的實現如共同關注、共同粉絲、共同喜好等功能。這個過程也就是求交集的過程,具體命令如下:

sinterstore key1 key2 key3   將交集存在key1內

 

5、Sorted Set:和set相比,sorted set增加了一個權重參數score,使得集合中的元素能夠按score進行有序排列

Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重復的成員。

不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。

有序集合的成員是唯一的,但分數(score)卻可以重復。

集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

常用命令: zadd,zrange,zrem,zcard等。

應用場景:在直播系統中,實時排行信息包含直播間在線用戶列表,各種禮物排行榜,彈幕消息(可以理解為按消息維度的消息排行榜)等信息,適合使用 Redis 中的 SortedSet 結構進行存儲。

 https://www.runoob.com/redis/redis-sorted-sets.html


免責聲明!

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



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