目錄:
說明:
- redis中所有數據結構都以唯一的key字符串作爲名稱,然後通過這個唯一的key來獲取對應的value
- 不同的數據類型數據結構差異就在於value的結構不一樣
字符串(string)
value的數據結構(數組)
- 字符串value數據結構類似於數組,採用與分配容易空間來減少內存頻繁分配
- 當字符串長度小於1M時,擴容就是加倍現有空間
- 如果字符串長度操作1M時,擴容時最多擴容1M空間,字符串最大長度爲 512M
字符串的使用場景(緩存)
- 字符串一個常見的用途是緩存用戶信息,我們將用戶信息使用JSON序列化成字符串
- 取用戶信息時會經過一次反序列化的過程
list(列表)
value的數據結構(雙向鏈表)
- 列表的數據結構是雙向鏈表,這意味着插入和刪除的時間複雜度是0(1),索引的時間複雜度位0(n)
- 當列表彈出最後一個元素後,該數據結構會被自動刪除,內存被回手
列表的使用場景
- 隊列
- 棧
hash(哈希)
value的數據結構(HashMap)
- redis中的字典也是HashMap(數組+列表)的二維結構
- 不同的是redis的字典的值只能是字符串
hash的使用場景(緩存)
- hash結構也可以用來緩存用戶信息,與字符串一次性全部序列化整個對象不同,hash可以對每個字段進行單獨存儲
- 這樣可以部分獲取用戶信息,節約網絡流量
- hash也有缺點,hash結構的存儲消耗要高於單個字符串
set(集合)
value的數據結構(字典)
- redis中的集合相當於一個特殊的字典,字典的所有value都位null
- 當集合中的最後一個元素被移除後,數據結構會被自動刪除,內存被回收
set使用場景
- set結構可以用來存儲某個活動中中獎的用戶ID,因爲有去重功能,可以保證同一用戶不會中間兩次
zset(有序集合)
value的數據結構(跳躍列表)
- zset一方面是一個set,保證了內部的唯一性
- 另一方面它可以給每一個value賦予一個score,代表這個value的權重
- zset內部實現用的是一種叫做“跳躍列表”的數據結構
- zset最後一個元素被移除後,數據結構就會被自動刪除,內存也會被回收
zset應用場景
- 粉絲列表:value(粉絲ID),score(關注時間),這樣可以輕鬆按關注事件排序
- 學生成績:value(學生ID),score(考試成績),這樣可以輕鬆對成績排序