1. 程式人生 > >細說Redis(一)之 Redis的資料結構與應用場景

細說Redis(一)之 Redis的資料結構與應用場景

原文: 細說Redis(一)之 Redis的資料結構與應用場景

這一篇文章主要介紹Redis的資料結構與應用場景

NOSQL之Redis

    Redis是一款由key-value儲存的軟體。說起NOSQL,有文件型、鍵值型、列型儲存、圖形資料庫。其中,在簡單的讀寫效能來說,鍵值型是最快的。

    Redis作為目前市面上使用最多的鍵值型資料儲存軟體,內建了多種型別的資料結構,並且提供了高可用解決方案,使用方便快捷。市面上有很多語言的庫可以呼叫Redis伺服器。

 

Redis的資料結構型別

    Redis有很多種資料結構,包括string、hash、list、set、sortset、hyperloglog、GEO。這些資料結構都可以設定鍵值的存在時間。

string介紹                          

    string是以一種純字串作為value的形式存在的。也是這幾種之中使用最多的資料結構。value可以儲存json格式、數值型等。

string使用場景                  
 

    string使用場景一般是儲存簡單的鍵值型別。比如使用者資訊,登入資訊,配置資訊等。還有一種用得比較多的是string的incr/decr操作,即自減/自增操作。呼叫它是原子性的,無論呼叫多少次,都一一計算成功。例如需要增減庫存的操作。

儘管string的value可以儲存很大,甚至500多MB的容量。但是在效能上來說,我們儘量儲存value的值不要過1MB。

 

hash介紹                         

    hash是一個集合,使用過hash的人都知道,hash的讀取效能都一樣快。在redis中,hash因為是一個集合,所以有兩層。第一層是key:hash集合value,第二層是hashkey:string value。所以判斷是否採用hash的時候可以參照有兩層key的設計來做參考。並且注意的是,設定過期時間只能在第一層的key上面設定。

hash使用場景                         

    使用hash,一般是有那種需要兩層key的應用場景,也可以是‘刪除一個key可以刪除所有內容’的場景。例如一個商品有很多規格,規格里面有不同的值。

    上面的例子表示成下面的圖:

clipboard_看圖王

 

    如果需要刪除商品時,可以一次性刪除‘商品id’的key,則商品裡面的所有規格也會刪除,而不需要找到對應的規格再做處理。如果查詢商品id與規格id1的商品時,則通過兩個key查詢即可。或者查詢所有商品的規格,查詢商品id即可。

    需要注意的是,經過測試,在效能上來說一般hash裡面的第二層key,不要超過200個為佳。儘管hash裡面的key-value能達到500多MB的儲存容量。

 

list介紹                            

    list是一個集合,而在redis中,list的使用場景多種多樣。在redis中,插入list中的值,只需要找到list的key即可,而不需要像hash一樣插入兩層的key。list是一種有序的、可重複的集合。

list使用場景                       

    list可以使用左推、左拉、右推、右拉的方式。所以你可以使用list作為集合儲存,比如儲存某寶商鋪裡面的所有商品。

    也可以用作輕量級別的佇列來使用。左推左拉、右推右拉。

   需要注意的是儘管redis可以使用推拉的佇列模式,但是一定要注意場景。因為redis的佇列是一種輕量級別的,沒有佇列重試、佇列重放機制。消費完佇列訊息在redis代表已經刪除了。

訊息佇列之釋出訂閱模式           

    redis除了list的推拉佇列模式之外,還有一種是釋出訂閱的模式。釋出訂閱模式有是publish/subscribe的命令。與推拉佇列模式不同之處在於,訂閱者可以訂閱多個頻道,釋出者可以向指定的頻道或者所有頻道傳送訊息。

    之所以在上面的list中結束這種佇列模式,主要為了對比這兩種的區別。

set介紹                            

    set是一種無序的,不能重複的集合。並且在redis中,只有一個key。

set使用場景                       

    如儲存一些標籤的名字。標籤的名字不可以重複,順序是可以無序的。

如下面:

clipboard

 

    需要注意的是使用set一定不要儲存大量的資料。value的值不宜過大,並且集合數量不宜過大。幾百個集合的值,value不超過1MB為佳。

sortset介紹                    

    sortset在redis中是有序的,並且不能重複。既有list的有序,又有set的不可重複性。

sortset使用場景              

sortset的使用場景一般是排行榜之類的場景。

clipboard

    sortset需要注意的地方與上面的set一致。

 

hyperloglog介紹                 

    hyperloglog,使用得不多。hyperloglog從建立一開始儲存12KB的容量。

hyperloglog使用場景          

    一般用於統計使用,例如統計頁面PV/UV等資料。

 

GEO介紹                           

    GEO,使用得也不多。用於處理地理位置的資訊。

GEO使用場景                   

    在redis中,GEO可以儲存地理位置的資訊,並且可以計算地理位置的距離等。場景就在於使用地理位置時,並且需要計算,快速的場景,可使用。

 

可以關注本人的公眾號,多年經驗的原創文章共享給大家。