Redis學習(二)Redis常用資料型別
常用資料型別
字串
特點
(一) 鍵都是字串型別 (二) 字串型別的 值最大不能超過512MB
命令
(一)批量設定值
mset key value [key value ... ] 時間複雜度:O(k),k是鍵的個數
(二)批量獲取值
mget key [key ... ] 時間複雜度:O(k),k是鍵的個數
(三)計數
incr key
內部編碼
int:8個位元組的長整型 embstr:小於等於39個位元組的字串 raw:大於39個位元組的字串
Redis會根據當前值的型別和長度決定使用哪種內部編碼實現
典型使用場景
(一)快取功能
Redis作為快取層,MySQL作為儲存層,大部分請求的資料都是從Redis中獲取。
(二)計數
Redis可以實現快速計數、查詢快取的功能,例如視訊播放次數計數
(三)共享Session
使用Redis將使用者的Session進行集中管理
雜湊
在Redis中,雜湊型別是指鍵值本身又是一種鍵值對結構
內部編碼
(一)ziplist(壓縮列表):ziplist使用更加緊湊的結構實現多個元素的連續儲存,所以在節省記憶體方面比hashtable更加優秀 (二)hashtable(雜湊表):hashtable的讀寫時間複雜度為O(1)
使用場景
三種方法快取使用者資訊 1)原生字串型別:每個屬性一個鍵
set user:1:name tom set user:1:age 23 set user:1:city beijing
優點:簡單直觀 缺點:佔用過多的鍵,記憶體佔用量大,此種方案一般不會在生產環境使用 2)序列化字串型別:將使用者資訊序列化後用一個鍵儲存
set user:1 serialize(userInfo)
優點:簡化程式設計 缺點:序列化和反序列化有一定開銷,,每次更新屬性都需要反序列化取出資料,更新之後再序列化到Redis 3)雜湊型別:每個使用者屬性使用一對filed-value,但是隻用一個鍵儲存
hmset user:1 name tom age .....
優點:簡單直觀 缺點:要控制好雜湊在ziplist和hashtable兩種內部編碼的轉換,hashtable會消耗更多記憶體
列表
(一)在Redis中,可以對列表兩端插入和彈出,可以充當棧和佇列的角色 (二)列表中的元素是有序的 (三)列表中的元素可以是重複的
命令
(一)從右邊插入元素
rpush key value [value ...]
(二)從左邊插入元素
lpush key value [value ...]
(三)從列表左側彈出元素
lpop key
(四)從列表右側彈出
rpop key
內部編碼
ziplist(壓縮列表) linkedlist(連結串列) Redis 3.2版本之後提供了quicklist內部編碼,結合了ziplist和linkedlist兩者的優勢
使用場景
(一)訊息佇列 Redis的lpush+brpop命令組合實現阻塞佇列 (二)文章列表
集合
特點
(一)集合中不允許有重複元素 (二)集合中的元素無序
內部編碼
(一)intset:整數集合 (二)hashtable
使用場景
(一)標籤
給使用者新增標籤
sadd user:1:tags tag1 tag2 tag5
有序集合
特點
(一)沒有重複元素 (二)元素可排序
內部編碼
(一)ziplist(壓縮列表) (二)skiplist(跳躍表)
使用場景
(一)排行榜系統