redis的五種資料結構及使用場景

2021-07-16 08:18:27 字數 2496 閱讀 7872

一、redis 資料結構使用場景

原來看過 redisbook 這本書,對 redis 的基本功能都已經熟悉了,從上週開始看 redis 的原始碼。目前目標是吃透 redis 的資料結構。我們都知道,在 redis 中一共有5種資料結構,那每種資料結構的使用場景都是什麼呢?

string——字串

hash——字典

list——列表

set——集合

sorted set——有序集合

下面我們就來簡單說明一下它們各自的使用場景:

1. string——字串

string 資料結構是簡單的 key-value 型別,value 不僅可以是 string,也可以是數字(當數字型別用 long 可以表示的時候encoding 就是整型,其他都儲存在 sdshdr 當做字串)。使用 strings 型別,可以完全實現目前 memcached 的功能,並且效率更高。還可以享受 redis 的定時持久化(可以選擇 rdb 模式或者 aof 模式),操作日誌及 replication 等功能。除了提供與 memcached 一樣的 get、set、incr、decr 等操作外,redis 還提供了下面一些操作:

複製**

**如下:

1.len niushuai:o(1)獲取字串長度

3.設定和獲取字串的某一段內容

4.設定及獲取字串的某一位(bit)

5.批量設定一系列字串的內容

6.原子計數器

7.getset 命令的妙用,請於清空舊值的同時設定乙個新值,配合原子計數器使用

2. hash——字典

在 memcached 中,我們經常將一些結構化的資訊打包成 hashmap,在客戶端序列化後儲存為乙個字串的值(一般是 json 格式),比如使用者的暱稱、年齡、性別、積分等。這時候在需要修改其中某一項時,通常需要將字串(json)取出來,然後進行反序列化,修改某一項的值,再序列化成字串(json)儲存回去。簡單修改乙個屬性就幹這麼多事情,消耗必定是很大的,也不適用於一些可能併發操作的場合(比如兩個併發的操作都需要修改積分)。而 redis 的 hash 結構可以使你像在資料庫中 update 乙個屬性一樣只修改某一項屬性值。

複製**

**如下:

儲存、讀取、修改使用者屬性

3. list——列表

複製**

**如下:

1.微博 timeline

2.訊息佇列

4. set——集合

set 就是乙個集合,集合的概念就是一堆不重複值的組合。利用 redis 提供的 set 資料結構,可以儲存一些集合性的資料。比如在微博應用中,可以將乙個使用者所有的關注人存在乙個集合中,將其所有粉絲存在乙個集合。因為 redis 非常人性化的為集合提供了求交集、並集、差集等操作,那麼就可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到乙個新的集合中。

5. sorted set——有序集合

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

1.帶有權重的元素,比如乙個遊戲的使用者得分排行榜

2.比較複雜的資料結構,一般用到的場景不算太多

二、redis 其他功能使用場景

1. 訂閱-發布系統

pub/sub 從字面上理解就是發布(publish)與訂閱(subscribe),在 redis 中,你可以設定對某乙個 key 值進行訊息發布及訊息訂閱,當乙個 key 值上進行了訊息發布後,所有訂閱它的客戶端都會收到相應的訊息。這一功能最明顯的用法就是用作實時訊息系統,比如普通的即時聊天,群聊等功能。

2. 事務——transactions

誰說 nosql 都不支援事務,雖然 redis 的 transactions 提供的並不是嚴格的 acid 的事務(比如一串用 exec 提交執行的命令,在執行中伺服器宕機,那麼會有一部分命令執行了,剩下的沒執行),但是這個 transactions 還是提供了基本的命令打包執行的功能(在伺服器不出問題的情況下,可以保證一連串的命令是順序在一起執行的,中間有會有其它客戶端命令插進來執行)。redis 還提供了乙個 watch 功能,你可以對乙個 key 進行 watch,然後再執行 transactions,在這過程中,如果這個 watched 的值進行了修改,那麼這個 transactions 會發現並拒絕執行。

Redis五種資料結構

redis除了儲存鍵之外還可以儲存常見的5種資料型別,分別是 string list set zset hash。結構型別 結構儲存的值 結構的讀寫能力 string字串 可以是字串 整數或浮點數 對整個字串或字串的一部分進行操作 對整數或浮點數進行自增或自減操作 list列表 乙個鍊錶,鍊錶上的每...

Redis五種資料結構

對redis來說,所有的key 鍵 都是字串,所謂的5種資料結構是指針對value而言 資料結構型別 說明使用場景 常用方法 其他鏈結 string字串型別1 redis中最基本的資料型別,乙個key對應乙個value。2 是二進位制安全的,意思是 redis 的 string 可以包含任何資料。如...

redis的五種資料結構

key 都是字串 value 五種資料結構 常用命令 常用命令 新增 lpush key value 將元素加入列表左邊 rpush key value 將元素加入列表右邊 獲取 lrange key start end 獲取範圍 刪除 lpop key 刪除列表最左邊的元素,並將元素返回 rpop...