Redis六大資料型別使用方法詳解
我們說 Redis 相對於Memcache 等其他的快取產品,有一個比較明顯的優勢就是 Redis 不僅僅支援簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。本篇部落格我們就將介紹這些資料型別的詳細使用以及順帶介紹Redis系統的相關命令用法。
注意:Redis的命令不區分大小寫,但是key 嚴格區分大小寫!!!
0、寫在前面
下面介紹的Redis命令有很多,如果你想通過死記硬背來記住這些命令幾乎不可能,但是如果理解了Redis的一些機制,這些命令其實是由很強的通用性的,通過理解來記憶是最好的。 另外,每種資料型別都有其適合的使用場景,我也會在文中給與說明,如果濫用,反而會適得其反。
1、string 資料型別
string 是Redis的最基本的資料型別,可以理解為與 Memcached 一模一樣的型別,一個key 對應一個 value。string 型別是二進位制安全的,意思是 Redis 的 string 可以包含任何資料,比如圖片或者序列化的物件,一個 redis 中字串 value 最多可以是 512M。
①、相關命令介紹
string 資料型別在 Redis 中的相關命令:
PS:
①、上面的 ttl 命令是返回 key 的剩餘過期時間,單位為秒。
②、mset和mget這種批量處理命令,能夠極大的提高操作效率。因為一次命令執行所需要的時間=1次網路傳輸時間+1次命令執行時間,n個命令耗時=n次網路傳輸時間+n次命令執行時間,而批量處理命令會將n次網路時間縮減為1次網路時間,也就是1次網路傳輸時間+n次命令處理時間。
但是需要注意的是,Redis是單執行緒的,如果一次批量處理命令過多,會造成Redis阻塞或網路擁塞(傳輸資料量大)。
③、setnx可以用於實現分散式鎖,具體實現方式後面會介紹。
上面是 string 型別的基本命令,下面介紹幾個自增自減操作,這在實際工作中還是特別有用的(分散式環境中統計系統的線上人數,利用Redis的高效能讀寫,在Redis中完成秒殺,而不是直接操作資料庫。)。
②、典型使用場景
一、計數
由於Redis單執行緒的特點,我們不用考慮併發造成計數不準的問題,通過 incrby 命令,我們可以正確的得到我們想要的結果。
二、限制次數
比如登入次數校驗,錯誤超過三次5分鐘內就不讓登入了,每次登入設定key自增一次,並設定該key的過期時間為5分鐘後,每次登入檢查一下該key的值來進行限制登入。
2、hash 資料型別
hash 是一個鍵值對集合,是一個 string 型別的 key和 value 的對映表,key 還是key,但是value是一個鍵值對(key-value)。類比於 Java裡面的 Map<String,Map<String,Object>> 集合。
①、相關命令介紹
演示如下:
②、典型使用場景
查詢的時間複雜度是O(1),用於快取一些資訊。
3、list 資料型別
list 列表,它是簡單的字串列表,按照插入順序排序,你可以新增一個元素到列表的頭部(左邊)或者尾部(右邊),它的底層實際上是個連結串列。
列表有兩個特點:
一、有序
二、可以重複
這兩個特點要注意和後面介紹的集合和有序集合相對比。
①、相關命令介紹
②、典型使用場景
一、棧
通過命令 lpush+lpop
二、佇列
命令 lpush+rpop
三、有限集合
命令 lpush+ltrim
四、訊息佇列
命令 lpush+brpop
4、set 資料型別
Redis 的 set 是 string 型別的無序集合。
相對於列表,集合也有兩個特點:
一、無序
二、不可重複
①、相關命令介紹
②、典型使用場景
利用集合的交併集特性,比如在社交領域,我們可以很方便的求出多個使用者的共同好友,共同感興趣的領域等。
5、zset 資料型別
zset(sorted set 有序集合),和上面的set 資料型別一樣,也是 string 型別元素的集合,但是它是有序的。
①、相關命令介紹
②、典型使用場景
和set資料結構一樣,zset也可以用於社交領域的相關業務,並且還可以利用zset 的有序特性,還可以做類似排行榜的業務。
6、Redis5.0新資料結構-stream
Redis的作者在Redis5.0中,放出一個新的資料結構,Stream。Redis Stream 的內部,其實也是一個佇列,每一個不同的key,對應的是不同的佇列,每個佇列的元素,也就是訊息,都有一個msgid,並且需要保證msgid是嚴格遞增的。在Stream當中,訊息是預設持久化的,即便是Redis重啟,也能夠讀取到訊息。那麼,stream是如何做到多播的呢?其實非常的簡單,與其他佇列系統相似,Redis對不同的消費者,也有消費者Group這樣的概念,不同的消費組,可以消費同一個訊息,對於不同的消費組,都維護一個Idx下標,表示這一個消費群組消費到了哪裡,每次進行消費,都會更新一下這個下標,往後面一位進行偏移。
7、系統相關命令
8、key 相關命令
關於 key 的命令應該說是最常用的,需要大家記住。
這裡在介紹一個命令 :
OBJECT ENCODING key
這是用來顯示這五種資料型別的底層資料結構,下一篇部落格我們會詳細介紹。
上面的命令我們給string 資料型別 k1 複製str,給 k2 複製123,通過 OBJECT ENCODING 顯示底層實現的資料型別分別是 embstr 和 int。
參考文件:http://www.redis.cn/commands.html
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。