Redis詳解(三)------ redis的六大數據類型詳細用法

原文:Redis詳解(三)------ 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 中的相關命令:

  表格圖片引用:http://www.cnblogs.com/xrq730/p/8944539.html(下同)

  

   

  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

     http://www.cnblogs.com/xrq730/p/8944539.html

本系列教程持續更新,可以微信搜索「 IT可樂 」第一時間閱讀。回覆《電子書》有我爲大家特別刷選的書籍資料

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章