Redis數據類型:五大基本數據類型及三種特殊類型

String (字符串類型)
String是redis最基本的類型,你可以理解成Memcached一模一樣的類型,一個key對應一個value。
String類型是二進制安全的,意思是redis的string可以包含任何數據,比如jpg圖片或者序列化的對象。
String類型是redis最基本的數據類型,一個redis中字符串value最多可以是512M
Hash(哈希,類似 Java里的Map)
Redis hash 是一個鍵值對集合。
Redis hash 是一個String類型的field和value的映射表,hash特別適合用于存儲對象。
類似Java里面的Map<String,Object>
List(列表)
Redis列表是簡單的字符串列表,按照插入順序排序,你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
它的底層實際是個鏈表 !
Set(集合)
Redis的Set是String類型的無序集合,它是通過HashTable實現的 !
Zset(sorted set:有序集合)
Redis zset 和 set 一樣,也是String類型元素的集合,且不允許重復的成員。
不同的是每個元素都會關聯一個double類型的分數。
Redis正是通過分數來為集合中的成員進行從小到大的排序,zset的成員是唯一的,但是分數(Score)卻可以重復。
HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 結構。
Redis HyperLogLog 是用來做基數統計的算法,HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定 的、并且是很小的。
在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。
HyperLogLog則是一種算法,它提供了不精確的去重計數方案。
舉個栗子:假如我要統計網頁的UV(瀏覽用戶數量,一天內同一個用戶多次訪問只能算一次),傳統的解決方案是使用Set來保存用戶id,然后統計Set中的元素數量來獲取頁面UV。但這種方案只能承載少量用戶,一旦用戶數量大起來就需要消耗大量的空間來存儲用戶id。我的目的是統計用戶數量而不是保存用戶,這簡直是個吃力不討好的方案!而使用Redis的HyperLogLog最多需要12k就可以統計大量的用戶數,盡管它大概有0.81%的錯誤率,但對于統計UV這種不需要很精確的數據是可以忽略不計的。
GEO地理位置
Redis 的 GEO 特性在 Redis 3.2 版本中推出, 這個功能可以將用戶給定的地理位置信息儲存起來, 并對這些信息進行操作。來實現諸如附近位置、搖一搖這類依賴于地理位置信息的功能。geo的數據類型為zset。
GEO 的數據結構總共有六個常用命令:geoadd、geopos、geodist、georadius、georadiusbymember、gethash
BitMap
在開發中,可能會遇到這種情況:需要統計用戶的某些信息,如活躍或不活躍,登錄或者不登錄;又如需要記錄用戶一年的打卡情況,打卡了是1, 沒有打卡是0,如果使用普通的 key/value存儲,則要記錄365條記錄,如果用戶量很大,需要的空間也會很大,所以 Redis 提供了 Bitmap 位圖這中數據結構,Bitmap 就是通過操作二進制位來進行記錄,即為 0 和 1;如果要記錄 365 天的打卡情況,使用 Bitmap表示的形式大概如下:0101000111000111...........................,這樣有什么好處呢?當然就是節約內存了,365 天相當于 365 bit,又 1 字節 = 8 bit , 所以相當于使用 46 個字節即可。
BitMap 就是通過一個 bit 位來表示某個元素對應的值或者狀態, 其中的 key 就是對應元素本身,實際上底層也是通過對字符串的操作來實現。Redis 從 2.2 版本之后新增了setbit, getbit, bitcount 等幾個bitmap 相關命令。

浙公網安備 33010602011771號