LREMの挙動
挙動というかなんというか……
説明を読んでなかったのでよく理解できていなかったのだけど。
LREMは
> LREM list [-1,0,1] "value"
というふうに使うのだけど、2つ目の引数であるcountの意味がよくわかってなかった。
count > 0 | 先頭から後方に向かってvalueに一致する要素を1つだけ削除 |
count < 0 | 後方から先頭に向かってvalueに一致する要素を1つだけ削除 |
count = 0 | valueに一致する要素をすべて削除 |
ということになる。(てかLREM – Redisにちゃんと書いてある)
参考として、
> flushdb OK > RPUSH aaa 1 2 3 1 2 3 (integer) 6 > LRANGE aaa 0 -1 1) "1" 2) "2" 3) "3" 4) "1" 5) "2" 6) "3"
とかやってからそれぞれ試してみると、以下のような感じ。
count > 0
> LREM aaa 1 "3" (integer) 1 > LRANGE aaa 0 -1 1) "1" 2) "2" 3) "1" 4) "2" 5) "3"
先頭から後方に向かって検索し、先頭に近い"3"が削除される。
count < 0
> LREM aaa -1 "2" (integer) 1 > LRANGE aaa 0 -1 1) "1" 2) "2" 3) "1" 4) "3"
後方から先頭に向かって検索し、後方に近い"2"が削除される。
count = 0
> LREM aaa 0 "1" (integer) 2 > LRANGE aaa 0 -1 1) "2" 2) "3"
"1"に一致するすべての値が削除される。
countの値はindexかなんかだと思ってたので、思ったとおりに削除できないなあと思ってたり。
ドキュメントはちゃんと読みましょうという感じ……