一、前言
Redis除了可以儲存鍵還可以儲存常見的5種資料型別,分別是:String、List、Set、Hash、ZSet。對於Redis的命令有一部分是可以公用的,但是還有一些其他的命令是屬於特殊使用的。
首先看看一張關於Redis5種資料結構的對比:
下邊就分別介紹5中國不同的資料結構型別。
二、String字串型別
Redis中的String型別就是一個由位元組組成的序列,他和其他程式語言或者其他鍵值對儲存提供的字串操作非常相似。
一個String型別的例項,其中鍵為hello,值為world:
(1)常用命令如下:
(2)Redis中的自增命令和自減命令:
(3)除了get、set、del、自增、自減等操作外,Redis還提供了下面一些操作:
- 獲取字串長度
- 往字串append內容
- 設定和獲取字串的某一段內容
- 設定及獲取字串的某一位(bit)
- 批量設定一系列字串的內容
如下圖所示:
(4)應用場景:
String是最常用的一種資料型別,普通的key/value儲存都可以歸為此類,value其實不僅是String, 也可以是數字:比如想知道什麼時候封鎖一個IP地址(訪問超過幾次)。INCRBY命令讓這些變得很容易,通過原子遞增保持計數。
三、List列表型別
Redis中的List其實就是連結串列(redis 使用雙端連結串列實現的 List),相信學過資料結構知識的人都應該能理解其結構。
使用 List 結構,我們可以輕鬆地實現最新訊息排行等功能(比如新浪微博的 TimeLine )。List 的另一個應用就是訊息佇列,可以利用 List 的 PUSH 操作,將任務存在 List 中,然後工作執行緒再用 POP 操作將任務取出進行執行。
一個List型別的例項,列表包含的元素,相同元素可以重複出現:
需要注意的是:一個List結構可以有序的儲存多個字串,並且是允許元素重複的。
(1)常用命令如下:
LPUSH和RPUSH命令分別用於將元素推入列表的左端和右端;LPOP和RPOP命令分別用於從列表的左端和右端彈出元素,也就是刪除元素;
其中對於LRANGE命令來說,使用0位範圍的起始索引,-1為範圍的結束索引,可以取出列表包含元素的所有元素。
(2)除了上邊比較常用的命令之外,Redis列表還可以從列表裡邊移除元素、將元素插入列表中間、將列表修剪至指定長度的命令,以及一些其他命令。
(3)使用場景:
- 微博 TimeLine
- 訊息佇列
四、Set集合型別
Redis的集合和列表都可以儲存多個字串,他們的不同支援在於,列表可以儲存多個相同的字串,而集合通過使用雜湊表來保證自己儲存的每個字串都是各不相同的。
Redis的集合使用的是無序的方式儲存元素,所以不可以像List列表那樣,將元素推入集合的某一端,或者從集合的某一端彈出元素。
一個Set集合型別的例項,各不相同的元素,無序排列:
(1)常用命令如下:
(2)除了常見的命令之外,還有交集、並集、差集的計算,如下:
(3)使用場景:
- 共同好友、二度好友
- 利用唯一性,可以統計訪問網站的所有獨立 IP
- 好友推薦的時候,根據 tag 求交集,大於某個 threshold 就可以推薦
五、Hash雜湊型別
Redis的雜湊可以儲存多個鍵值對之間的對映。和字串一樣,雜湊儲存的值既可以是字串又可以是數字值,並且使用者同樣可以對雜湊儲存的數字執行自增操作或者是自減操作。
一個List雜湊型別的例項,是一個包含兩個鍵值對的雜湊鍵:
(1)常用命令如下:
(2)其他命令包含新增和刪除鍵值對的命令、獲取所有鍵值對的命令、以及對鍵值對的值進行自增和自減操作的命令,如下所示:
六、Redis的有序集合ZSet資料型別
有序集合和雜湊一樣,用於儲存鍵值對;有序集合的鍵被稱為成員member,每一個成員都是獨一無二的;而有序集合的值被稱為分值score,分值必須是浮點數。
有序集合是Redis裡面唯一一個既可以根據成員訪問元素,又可以根據分值以及分值的排序來訪問元素的結構。
一個有序集合型別的例項,zset-key是一個包含兩個元素的有序集合鍵:
常用命令如下: