redis實現(xiàn)刪除list中特定索引的值
redis刪除list中特定索引的值
Redis可以通過LINDEX key index獲取list中的特定值, 但無法直接刪除特定索引下的值.
LSET與LREM結合刪除list中特定索引的值
兩步:
- 先用LSET在指定索引位置上設置特殊值: LSET key index value在指定索引位置的值替換為value
- 再用LREM刪除該特殊值: LREM key n value, 從左邊刪除n個value
例如:刪除list1索引3對應的在值
LSET list1 3 del LREM list1 1 del
補充
在Redis中, list是雙向鏈表有兩種索引:
- 正向索引: 0, 1, 2, 3, ...
- 逆向索引: -1, -2, -3, ...
與刪除的相關的操作有:
- LPOP / RPOP key: 從左邊/右邊彈出一個值
- LREM key n value: 從左邊刪除n個value
- LTRIM key begin-index, end-index: 僅保留指定區(qū)間的元素
Redis的區(qū)間都是閉區(qū)間, [begin-index, end-index]
redis對于刪除list中的某個元素
近期要接im,我們的信息都是放到redis的緩存中,結構為list,如果知道特定的值的話,通過LREM key count value這樣就可以。對于redis的list結構,獲取某個位置的值通過 LINDEX key index,如果想要獲取list的長度,通過LLEN key來獲取。對于list中特定值的刪除。
我們打算獲取全部的list中全部的內容,然后便來你找到要刪除的值,通過LREM key count value 刪除。
LREM key count value
根據(jù)參數(shù) count 的值,移除列表中與參數(shù) value 相等的元素。
count的值可以是以下幾種:
- count > 0 : 從表頭開始向表尾搜索,移除與 value 相等的元素,數(shù)量為 count 。
- count < 0 : 從表尾開始向表頭搜索,移除與 value 相等的元素,數(shù)量為 count 的絕對值。
- count = 0 : 移除表中所有與 value 相等的值。
自己寫了個lua腳本,做了一個刪除的過程:
local result={} --list key local key="test" local size=0 redis.call("select",2) -- 長度 local length=redis.call("llen",key) -- 要刪除的value local findKey="msg:382"; if(length>0)then --獲取去全部的list local values=redis.call("Lrange",key,0,length-1) local index=-1 for i = 1, length,1 do if(string.find(values[i],findKey)) then index=i redis.call("LREM",key,0,values[i]) break end end return true else return false end
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
基于Redis實現(xiàn)共享Session登錄的實現(xiàn)
本文主要介紹了基于Redis實現(xiàn)共享Session登錄的實現(xiàn),包括發(fā)送短信驗證碼、短信驗證碼登錄和注冊、以及登錄狀態(tài)校驗的流程,具有一定的參考價值,感興趣的可以了解一下2025-03-03無法啟動Redis打開redis-server閃退的問題解決辦法
正常開啟redis服務,首先要啟動redis-server.exe,但是閃退,導致無法開啟redis服務,這篇文章主要給大家介紹了關于無法啟動Redis打開redis-server閃退問題的解決辦法,需要的朋友可以參考下2024-07-07