redis資料庫中有五種資料結構,它們分別是:string-字串、Hash-字典、List-列表、Set-集合、Sorted Set-有序集合。
這五個資料結構分別有著不同的使用場景,以下我們就來介紹下它們的使用場景。
1、String
String資料結構是簡單的Key-Value類型,value不只可以是String,也可以是數字(當數字型別用Long可以表示的時候encoding就是整數,其他都儲存在sdshdr當作字串)。使用String類型,可以完全實現目前Memcached的功能,並且效率更高。還可以享受redis的定時持久化(可以選擇RDB模式或AOF模式),操作日誌及Replication等功能。除了提供與Memcached一樣的get、set、incr、decr等操作外,redis還提供了下面的一些操作:
1.LEN niushuai:O(1)获取字符串长度 2.APPEND niushuai redis:往字符串 append 内容,而且采用智能分配内存(每次2倍) 3.设置和获取字符串的某一段内容 4.设置及获取字符串的某一位(bit) 5.批量设置一系列字符串的内容 6.原子计数器 7.GETSET 命令的妙用,请于清空旧值的同时设置一个新值,配合原子计数器使用
2、Hash
在Memcached中,我們經常將一些結構化的資訊打包成HashMap,在客戶端序列化後儲存為字串的值(一般是JSON格式),例如使用者的暱稱、年齡、性別等。這時候在需要修改其中一項時,通常需要將字串(JSON)取出來,然後進行反序列化,修改某一項的值,在序列化成字串(JSON)儲存回去。簡單修改一個屬性就乾這麼多事,消耗必定是很大的,也不適用一些可能並發操作的場合(例如兩個並發的操作都需要修改年齡)。而redis的Hash結構可以讓你像在資料庫中Update一個屬性一樣只修改某一項屬性值。 (儲存、讀取、修改使用者屬性)
3、List
List說白了就是鍊錶(redis使用雙端鍊錶實作的List),相信學過資料結構知識的人都應該理解其結構。使用List結構,我們可以輕鬆的實作最新訊息排行等功能(例如新浪部落格的TimeLine)。 List的另一個應用程式就是訊息佇列,可以利用List的Push操作,將任務存在List中,然後工作執行緒再用PoP操作將任務取出執行。 Redis也提供了操作List中某一段元素的API,你可以直接查詢,刪除List中某一段的元素。
(學習影片分享:redis資料庫教學)
4、Set
Set就是一個集合,集合的概念就是一堆不重複值的組合。利用Redis提供的Set資料結構,可以儲存一些集合性的資料。例如在微博應用程式中,可以將一個使用者所有的追蹤人存在一個集合中,將其所有的粉絲存在一個集合。因為Redis非常人性化的為集合提供了求交集、並集、差集等操作,那麼就可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果傳回給客戶端還是存到一個新的集合。
1.共同好友、二度好友 2.利用唯一性,可以统计访问网站的所有独立 IP 3.好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐
5、Sorted Set
和Set相比,Sorted Set是將set中的元素增加了一個權重參數score,使得集合中的元素能夠按score進行有序排列,例如一個儲存全班同學成績的Sorted Set,其集合value可以是同學的學號,而score就可以是其考試得分,這樣在資料插入集合的時候,就已經進行了天然的排序。另外還可以用Sorted Set來做帶有權重的佇列,例如普通訊息的score為1,重要訊息為2,然後工作執行緒可以選擇sore的倒序來取得工作任務。讓重要的任務優先執行。
二、redis其他功能使用場景
1、訂閱-發布系統
Pub/Sub從字面上理解就是發布(Publish)與訂閱(Subscribe),在在Rdis中,你可以設定對某一個key值進行訊息發佈及訊息訂閱,當一個key值上進行了訊息發布後,所有訂閱他的客戶端都會收到對應的訊息。這項功能最明顯的用法就是用作即時訊息系統。
2、事務
誰說NoSql都不支援事務,雖然redis的事務提供的並不是嚴格的ACID的事務(例如一串用EXEC提交執行的命令,在執行中伺服器宕機,那麼會有一部分命令執行了,剩下的沒執行),但是這個事務還是提供了基本的命令打包執行的功能(在伺服器不出問題的情況下,可以保證一連串的命令是順序在一起執行的,中間會有其他客戶端指令插進來執行)。 redis也提供了一個watch功能,你可以對一個key進行watch,然後再執行事務,在這個過程中,如果這個watch的值進行了修改,那麼這個事務會發現並拒絕執行。
相關推薦:redis資料庫教學
以上是redis的資料結構的使用場景介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!