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

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

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

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

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

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

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

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

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

應用場景:

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

(2)使用 redis 的 lst 來實現緩存用戶最近瀏覽商品

4、Set:Set 對外提供的功能與 list 類似是一個列表的功能,特殊之處在於 set 是可以自動排重的。當你需要存儲一個列表數據,又不希望出現重複數據時,set 是一個很好的選擇,並且 set 提供了判斷某個成員是否在一個 set 集合內的重要接口,這個也是 list 所不能提供的。可以基於 set 輕易實現交集、並集、差集的操作。Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重複的數據。Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是 O (1)。

應用場景:

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

5、Sorted Set:和 set 相比,sorted set 增加了一個權重參數 score,使得集合中的元素能夠按 score 進行有序排列。Redis 有序集合和集合一樣也是 string 類型元素的集合,且不允許重複的成員。不同的是每個元素都會關聯一個 double 類型的分數。redis 正是通過分數來爲集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數 (score) 卻可以重複。集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是 O (1)。

應用場景:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章