1. 程式人生 > >Redis學習(二)Redis常用資料型別

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(跳躍表)

使用場景

(一)排行榜系統