天天看點

redis5種資料結構講解及使用場景

 string  list  hash set zset

 探究 Redis 4 的 stream 類型

redis提供了5中資料結構,了解每種資料結構的特點對于redis開發運維非常重要。 

一、字元串

字元串類型是redis最基礎的資料結構,首先鍵是字元串類型,而且其他幾種結構都是在字元串類型基礎上建構的,是以字元串類型能為其他四種資料結構的學習尊定基礎。字元串類型實際上可以是字元串(簡單的字元串、複雜的字元串(xml、json)、數字(整數、浮點數)、二進制(圖檔、音頻、視訊)),但最大不能超過512M。

  • 使用場景:
    • 緩存功能:字元串最經典的使用場景,redis最為緩存層,Mysql作為儲存層,絕大部分請求資料都是redis中擷取,由于redis具有支撐高并發特性,是以緩存通常能起到加速讀寫和降低 後端壓力的作用。(redis為何具備支撐高并發的特性,下次文章講解)。
    • 計數器:許多運用都會使用redis作為計數的基礎工具,他可以實作快速計數、查詢緩存的功能,同時資料可以一步落地到其他的資料源。如:視訊播放數系統就是使用redis作為視訊播放數計數的基礎元件。
    • 共享session:出于負載均衡的考慮,分布式服務會将使用者資訊的通路均衡到不同伺服器上,使用者重新整理一次通路可能會需要重新登入,為避免這個問題可以用redis将使用者session集中管理,在這種模式下隻要保證redis的高可用和擴充性的,每次擷取使用者更新或查詢登入資訊都直接從redis中集中擷取。
    • 限速:處于安全考慮,每次進行登入時讓使用者輸入手機驗證碼,為了短信接口不被頻繁通路,會限制使用者每分鐘擷取驗證碼的頻率。

二、哈希

在redis中哈希類型是指鍵本身又是一種鍵值對結構,如 value={{field1,value1},......fieldN,valueN}}

  • 使用場景:哈希結構相對于字元串序列化緩存資訊更加直覺,并且在更新操作上更加便捷。是以常常用于使用者資訊等管理,但是哈希類型和關系型資料庫有所不同,哈希類型是稀疏的,而關系型資料庫是完全結構化的,關系型資料庫可以做複雜的關系查詢,而redis去模拟關系型複雜查詢,開發困難,維護成本高。

三、清單

清單類型是用來儲存多個有序的字元串,清單中的每個字元串成為元素(element),一個清單最多可以儲存2的32次方-1個元素,在redis中,可以隊清單兩端插入(pubsh)和彈出(pop),還可以擷取指定範圍的元素清單、擷取指定索引下表的元素等,清單是一種比較靈活的資料結構,它可以充當棧和隊列的角色,在實際開發中有很多應用場景。

  • 優點:
    • 清單的元素是有序的,這就意味着可以通過索引下标擷取某個或某個範圍内的元素清單。
    • 清單内的元素是可以重複的。
    • 消息隊列: redis的lpush+brpop指令組合即可實作阻塞隊列,生産者用戶端是用lupsh從清單左側插入元素,多個消費者用戶端使用brpop指令阻塞時的“搶”清單尾部的元素,多個用戶端保證了消費的負載均衡和高可用性
      redis5種資料結構講解及使用場景
      消息隊列模型↑
    • 文章清單:每個使用者都有屬于自己的文章清單,現在需要分頁展示文章清單,此時可以考慮使用清單,清單不但有序,同時支援按照索引範圍擷取元素。
    • 使用清單技巧:
      • lpush+lpop=Stack(棧)
      • lpush+rpop=Queue(隊列)
      • lpush+ltrim=Capped Collection(有限集合)
      • lpush+brpop=Message Queue(消息隊列)

四、集合

集合類型也是用來儲存多個字元串的元素,但和清單不同的是集合中不允許有重複的元素,并且集合中的元素是無序的,不能通過索引下标擷取元素,redis除了支援集合内的增删改查,同時還支援多個集合取交集、并集、差集,并合理的使用好集合類型,能在實際開發中解決很多實際問題。

    • 标簽(tag):集合類型比較典型的使用場景,如一個使用者對娛樂、體育比較感興趣,另一個可能對新聞感興 趣,這些興趣就是标簽,有了這些資料就可以得到同一标簽的人,以及使用者的共同愛好的标簽,這些資料對于使用者體驗以及曾強使用者粘度比較重要。(使用者和标簽的關系維護應該放在一個事物内執行,防止部分指令失敗造成資料不一緻)
    • 其他
      • sadd=tagging(标簽)
      • spop/srandmember=random item(生成随機數,比如抽獎)
      • sadd+sinter=social Graph(社交需求)

五、有序集合

有序集合和集合有着必然的聯系,他保留了集合不能有重複成員的特性,但不同得是,有序集合中的元素是可以排序的,但是它和清單的使用索引下标作為排序依據不同的是,它給每個元素設定一個分數,作為排序的依據。(有序集合中的元素不可以重複,但是csore可以重複,就和一個班裡的同學學号不能重複,但考試成績可以相同)。

  • 清單、集合、有序集合三者的異同點
    • 排行榜:有序集合經典使用場景。例如視訊網站需要對使用者上傳的視訊做排行榜,榜單維護可能是多方面:按照時間、按照播放量、按照獲得的贊數等。