Redis - LREM command

LREM 命令可以用來移除 Redis List 中指定的元素值。


其語法如下:

LREM key count value


LREM 後面帶入 List 的 Key、要刪除的元素個數、要刪除的元素值,回傳值為被移除的元素數量。


其中 count 值如果為正則會從頭到尾找尋符合指定值的元素移除、如果為負則會從尾到頭移除符合指定值的元素、如果為 0 則會移除所有符合指定值的元素。


LREM 命令的時間複雜度為 O(N),N 為 List 的長度。


雖然時間複雜度為 O(N),但是因為該命令會由指定的方向遍巡,且當移除了足夠的元素數量後就會停止遍巡,因此在某些情境下命令使用恰當的話效率其實不會到 O(N) 那麼糟。


像是如果準備 1 - 10000 的 List,然後用 LREM 將資料從尾部移除 1 - 10000。

1
2
3
4
5
6
7
for i=1,10000 do
redis.call('lpush', 'Test123', i)
end

for i=1, 10000 do
redis.call('lrem', 'Test123', -1, i)
end


這樣運行起來會是 0.23 s。


如果反過來用 LREM 將資料從頭部移除 1 - 10000。

1
2
3
4
...
for i=1, 10000 do
redis.call('lrem', 'Test123', 1, i)
end


運行的時間就會放大到 4.65 s。