Redis系列學習筆記4 列表

2021-07-11 23:56:12 字數 2750 閱讀 7068

以有序的方式儲存多個可重複的值

lpush key value [value …]

將乙個或以上數量的值依次推入到列表的左端,命令返回新值被推入之後,列表目前包含的項數量。

rpush key value [value …]

將乙個或以上數量的值依次推入到列表的右端,命令返回新值被推入之後,列表目前包含的項數量。

lpop key

移除並返回列表最左端的項

rpop

移除並返回列表最右端的項

llen key

返回列表鍵key的長度,也即是,返回列表包含的列表項數量。

lindex key index

返回列表鍵key中,指定索引index上的列表項。index索引可以是正數或者負數。

lrange key start stop

返回列表鍵key中,從索引start至索引stop範圍內的所有列表項。兩個索引引數都可以是正數或者負數。

twitter使用redis的列表來儲存使用者時間線

列表的每一項都包含乙個訊息id,通過這個id可以查詢到訊息本身。每當有新的訊息要新增到使用者的時間線裡面時,程式就會把該訊息的id推入到使用者的時間線列表裡面。每當有人訪問使用者的時間線時,程式就會訪問時間線列表,並根據列表中儲存的id來獲取使用者時間線上的訊息。通過時間線列表中的不同範圍,程式可以獲取到不同時期的訊息,越接近表頭的訊息就越新,越接近表尾的訊息就越舊。

api說明

操作timeline(user_name, client)

指向使用者的時間線。

timeline.push(message_id)

將訊息推入至使用者時間線

呼叫lpush命令(列表左方為新訊息,右方為舊訊息)。

timeline.fetch_recent(n)

獲取最新的n條訊息。

呼叫lrange命令。

timeline.fetch_from_index(start_index, n)

獲取從start_index索引開始的n條訊息

呼叫lrange命令。

lset key index value

將列表鍵key索引index上的列表項設定為value,設定成功時命令返回ok。如果index引數超過了列表的索引範圍,那麼命令返回乙個錯誤。

linsert key before|after pivot value

根據命令呼叫時傳遞的是before選項還是after選項,將值value插入到指定列表項pivot的之前或者之後。當pivot不存在列表key時,不執行任何操作。

lrem key count value

根據引數count的值,移除列表中與引數value相等的列表項:

ltrim key start stop

對乙個列表進行修剪(trim),讓列表只保留指定索引範圍內的列表項,而將不在範圍內的其他列表項全部刪除。兩個索引都可以是正數或者負數。

api說明

操作fixedfifo(key, max_length, client)

key設定佇列儲存在哪個鍵,max_length設定佇列的最大長度

fixedfifo.enqueue(item)

將給定值推入到佇列

呼叫lpush命令來推入值,電泳lrtim命令來保持佇列的最大長度。

fixedfifo.dequeue()

彈出列表中最舊的值。

呼叫rpop命令。

fixedfifo.get_all_items()

返回佇列包含的所有值

呼叫lrange命令。

fixedfifo.length()

返回佇列的長度。

呼叫llen命令。

api說明

blpop key [key …] timeout

lpop命令的阻塞版本:命令會以從左到右的順序,訪問給定的各個列表,並彈出首個非空列表最左端的項;如果所有給定列表都為空。那麼客戶端將被阻塞,直到等待超時,或者有可彈出的項出現為止:設定timeout引數為0表示永遠阻塞。

brpop key [key …] timeout

rpop命令的阻塞版本:命令會以從左到右的順序,訪問給定的各個列表,並彈出首個非空列表最左端的項;如果所有給定列表都為空。那麼客戶端將被阻塞,直到等待超時,或者有可彈出的項出現為止:設定timeout引數為0表示永遠阻塞。

如果有多個客戶端同時因為某個列表而被阻塞,那麼當有新值被推入到這個列表時,伺服器會按照先到先服務原則,優先向最早被阻塞的客戶端返回新值。

當使用者發布twitter訊息,所有關注者都應該收到訊息,但是當關注者數量過大時,推送操作需要花費大量時間才能完成,傳送訊息的使用者需要等待很久才能獲得響應。

傳送者<---傳送訊息--->web伺服器---推入--->訊息佇列<---取出訊息推送給關注者---訊息伺服器
好處:

訊息佇列實現

api說明

操作messagequeue(key, client)

將給定鍵設定為訊息佇列。

messagequeue.enqueue(item)

將給定值推入到佇列裡面。

呼叫lpush命令。

messagequeue.dequeue(timeout)

在給定的時限內,等待佇列彈出乙個最舊的項。

呼叫brpop命令。

messagequeue.get_all_items()

返回佇列中的所有項

呼叫lrange命令。

messagequeue.length()

返回佇列的長度。

呼叫llen命令

Redis系列學習筆記3 雜湊

儲存多個域值對。乙個雜湊由多個域值對 field value pair 組成,雜湊的域和值都可以是文字 整數 浮點數或者二進位制資料。同乙個雜湊裡面的每個域必須是獨一無 二 各不相同的,而域的值則沒有這一要求,換句話說,不同域的值可以是重複的。通過命令,使用者可以對雜湊執行設定域值對 獲取域的值 檢...

Redis 學習筆記 3 4 列表型別

列表型別 list 可以儲存乙個有序的字串列表,常用的操作是向列表的兩端新增元素,或者獲得列表的某乙個片段。它的內部實現是雙向鍊錶,向頭尾兩端處理元素特別方便。適合的場景像是社交 的新鮮事,日誌記錄,關心尾部節點,不擔心舊有記錄的刪除調整情況。redis 的列表型別還可以用來實現佇列,並且支援阻塞式...

Redis系列學習 一 Redis簡介

2.4 總結 3.redis的特點 4.redis的應用場景 5.redis總結 redis是乙個開源的 遵守bsd協議 支援網路 可基於記憶體亦可持久化的日誌型 高效能 nosql key value資料庫。nosql資料庫的產生就是為了解決大規模資料集合多重資料種類帶來的挑戰,尤其是大資料應用難...