redis的list資料型別相關指令分析及如何使用
list清單簡介
list是依照插入順序排序的字串陣列(說通俗點,仍然儲存字串)。你可以加一個元素到列表的頭部(左邊)或尾部(右邊),個列表最多可以包含^32-1個元素(每個列表超過40億個元素)。
Redis中的list和Java中的LinkedList很像,底層都是一種鍊錶結構,list的插入和刪除操作非常快,時間複雜度為0(1),不像數組結構插入、刪除操作需要移動資料。儘管表面上仍然是列表,但Redis中的列表底層實作並不僅限於簡單的雙向鍊錶。
當資料量較少的時候它的底層儲存結構為一塊連續內存,稱之為ziplist(壓縮列表),它將所有的元素緊挨著一起存儲,分配的是一塊連續的記憶體;當資料量較多的時候將會變成quicklist(快速鍊錶)結構。
可單純的鍊錶也是有缺陷的,鍊錶的前後指標prev和next會佔用較多的內存,會比較浪費空間,而且會加重記憶體的碎片化。自Redis 3.2之後,Redis使用混合資料結構quicklist(快速鍊錶),該結構由ziplist和鍊錶組成。
常用指令
新增指令
#lpush key 值
從左邊插入元素(將一個或多個值插入到列表頭)
127.0.0.1:6379> lpush ids 1 (integer) 1 127.0.0.1:6379> lrange ids 0 -1 1) "1" 127.0.0.1:6379> lpush ids 2 (integer) 2 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1"
rpush key value
從右邊插入元素(將一個或多個值插入到列表的尾部(最右邊))
127.0.0.1:6379> rpush ids 3 (integer) 3 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "3"
linsert key BEFORE|AFTER pivot value
向某個元素前/後插入元素,傳回結果為目前清單長度,注意清單不存在或指定元素不存在清單中時,都將不執行任何操作。
//元素3前插入0 127.0.0.1:6379> linsert ids before 3 0 (integer) 4 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "0" 4) "3" //元素3后插入0 127.0.0.1:6379> linsert ids after 3 4 (integer) 5 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "0" 4) "3" 5) "4"
查詢指令
lrange key start end
取得清單中指定範圍內的元素清單;若start值大於清單end值則傳回空清單
如上已經展示過了
lindex key index
取得清單指定索引下標的元素
127.0.0.1:6379> lindex ids 0 "2" 127.0.0.1:6379> lindex ids -1 "4"
llen key
#取得清單長度;清單不存在則傳回0
127.0.0.1:6379> llen ids (integer) 5
彈出/刪除指令
#lpop key
從清單左側彈出元素並傳回頭部元素
127.0.0.1:6379> lpop ids "2" 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0" 3) "3" 4) "4"
rpop key
從清單右側彈出元素並返回尾部元素
127.0.0.1:6379> rpop ids "4" 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0" 3) "3"
lrem key count value
#從清單中找到等於value的元素進行刪除,依count的不同分為三種情況:
count > 0,從表頭開始向表尾,移除數量為count個元素;
count < 0,從表尾開始向表頭,移除數量為count的絕對值個元素;
count = 0,移除表中所有與value 相等的值
127.0.0.1:6379> lrem ids 0 3 (integer) 1 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0"
ltrim key start end
對一個清單進行修剪(trim),就是說,讓清單只保留指定區間內的元素,不在指定區間之內的元素都會被刪除
127.0.0.1:6379> ltrim ids 0 0 OK 127.0.0.1:6379> lrange ids 0 -1 1) "1"
修改指令
lset key index value
修改指定下標的元素的值設定為value
127.0.0.1:6379> lset ids 0 0 OK 127.0.0.1:6379> lrange ids 0 -1 1) "0"
阻塞彈出指令
blpop key [key …] timeout
移出並取得清單的第一個元素, 如果清單沒有元素會阻塞清單直到等待逾時(單位秒)或發現可彈出元素為止
brpop key [key …] timeout
移出並取得清單的最後一個元素, 如果清單沒有元素會阻塞清單直到等待逾時或發現可彈出元素為止
示範:
開啟三個reids連線窗口,第一個執行blpop ,第二個執行brpop ,第三個執行新增:
可以看到視窗1和2執行完都已經阻塞在這裡,這是因為ids中沒有元素
視窗3執行新增:lpush ids 1 2 3 4 5 6
可以看到視窗1和2立即彈出對應元素:
應用程式場景
訊息佇列:lpop和rpush(或反過來,lpush和rpop)能實現佇列的功能
朋友圈的讚列表、評論列表、排行榜:lpush指令和lrange指令能實現最新列表的功能,每次透過lpush指令往列表裡插入新的元素,然後透過lrange指令讀取最新的元素列表。
以上是redis的list資料型別相關指令分析及如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

在CentOS系統上,您可以通過修改Redis配置文件或使用Redis命令來限制Lua腳本的執行時間,從而防止惡意腳本佔用過多資源。方法一:修改Redis配置文件定位Redis配置文件:Redis配置文件通常位於/etc/redis/redis.conf。編輯配置文件:使用文本編輯器(例如vi或nano)打開配置文件:sudovi/etc/redis/redis.conf設置Lua腳本執行時間限制:在配置文件中添加或修改以下行,設置Lua腳本的最大執行時間(單位:毫秒)

使用Redis進行鎖操作需要通過SETNX命令獲取鎖,然後使用EXPIRE命令設置過期時間。具體步驟為:(1) 使用SETNX命令嘗試設置一個鍵值對;(2) 使用EXPIRE命令為鎖設置過期時間;(3) 當不再需要鎖時,使用DEL命令刪除該鎖。

使用 Redis 命令行工具 (redis-cli) 可通過以下步驟管理和操作 Redis:連接到服務器,指定地址和端口。使用命令名稱和參數向服務器發送命令。使用 HELP 命令查看特定命令的幫助信息。使用 QUIT 命令退出命令行工具。

Redis數據過期策略有兩種:定期刪除:定期掃描刪除過期鍵,可通過 expired-time-cap-remove-count、expired-time-cap-remove-delay 參數設置。惰性刪除:僅在讀取或寫入鍵時檢查刪除過期鍵,可通過 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-user-del 參數設置。
