Redis的List命令里沒有根據index刪除元素的命令,但有的時候業務會需要這個功能。
先上命令:
LSET ListKey index "__deleted__"
LREM ListKey 0 "__deleted__"
也可以用事務管道合並成一次請求
MULTI
LSET ListKey index "__deleted__"
LREM ListKey 0 "__deleted__"
EXEC
先用LSET命令將要刪除的索引值置為一個特殊的刪除標識,再利用LREM命令將有刪除標識的元素刪除掉。
另外相關討論顯示,redis之所以沒有直接內置這個命令,是因為要考慮分布式情況下 兩個或多個端同時發送LREM請求,index是一個但是可能會刪掉多個。LSET則只會覆蓋掉同一index的值。無法以安全的原子操作來實現它。