天天看點

Redis的七種武器及其适合的應用場景

長生劍、孔雀翎、碧玉刀、多情環、離别鈎、霸王槍、拳頭是古龍筆下的七種武器,而本文打算将Redis的幾種使用方式 Strings、Hashs、Lists、Sets、Sorted Sets、Pub/Sub、Transactions 也比作七種武器,為大家講解Redis的七種特性,并列舉其适合的應用場景。

  武器一:Strings

  Strings 資料結構是簡單的key-value類型,value其實不僅是String,也可以是數字。使用Strings類型,你可以完全實作目前 Memcached 的功能,并且效率更高。還可以享受Redis的定時持久化,記錄檔及 Replication等功能。除了提供與 Memcached 一樣的get、set、incr、decr 等操作外,Redis還提供了下面一些操作:

  ·擷取字元串長度

  ·往字元串append内容

  ·設定和擷取字元串的某一段内容

  ·設定及擷取字元串的某一位(bit)

  ·批量設定一系列字元串的内容

  武器二:Hashs

  在Memcached中,我們經常将一些結構化的資訊打包成hashmap,在用戶端序列化後存儲為一個字元串的值,比如使用者的昵稱、年齡、性别、積分等,這時候在需要修改其中某一項時,通常需要将所有值取出反序列化後,修改某一項的值,再序列化存儲回去。這樣不僅增大了開銷,也不适用于一些可能并發操作的場合(比如兩個并發的操作都需要修改積分)。而Redis的Hash結構可以使你像在資料庫中Update一個屬性一樣隻修改某一項屬性值。

  武器三:Lists

  Lists 就是連結清單,相信略有資料結構知識的人都應該能了解其結構。使用Lists結構,我們可以輕松地實作最新消息排行等功能。Lists的另一個應用就是消息隊列,可以利用Lists的PUSH操作,将任務存在Lists中,然後工作線程再用POP操作将任務取出進行執行。Redis還提供了操作Lists中某一段的api,你可以直接查詢,删除Lists中某一段的元素。

  武器四:Sets

  Sets 就是一個集合,集合的概念就是一堆不重複值的組合。利用Redis提供的Sets資料結構,可以存儲一些集合性的資料,比如在微網誌應用中,可以将一個使用者所有的關注人存在一個集合中,将其所有粉絲存在一個集合。Redis還為集合提供了求交集、并集、差集等操作,可以非常友善的實作如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的指令選擇将結果傳回給用戶端還是存集到一個新的集合中。

  武器五:Sorted Sets

  和Sets相比,Sorted Sets增加了一個權重參數score,使得集合中的元素能夠按score進行有序排列,比如一個存儲全班同學成績的Sorted Sets,其集合value可以是同學的學号,而score就可以是其考試得分,這樣在資料插入集合的時候,就已經進行了天然的排序。另外還可以用Sorted Sets來做帶權重的隊列,比如普通消息的score為1,重要消息的score為2,然後工作線程可以選擇按score的倒序來擷取工作任務。讓重要的任務優先執行。

  武器六:Pub/Sub