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 結構進行存儲。