Listのように聞こえます。リストにLPUSH
またはRPUSH
のいずれかを追加し、LRANGE
とDEL
のキーですべてを取得します。
P.S.リストを格納しているようなRedisのキーは、空にすることはできません。一度リストのメンバーをすべて削除すると、キー自体は存在しなくなります。そのため、キーを空にする代わりに削除できます。
OPのコメントへの回答で更新されました:実際には、無料のランチはありません。また、方法に関係なく、O(N)の読み取りと削除が必要です。 1回の反復を行うことが好ましい場合がある。ネットワーク通信を減らすことができますが、これはその1つではありません。
いずれにしても、両方の機能の組み合わせに最も近いのは、Luaです。
$ cat popall.lua
local r={}
local e=redis.call('LPOP', KEYS[1])
while e do
r[#r+1]=e
e=redis.call('LPOP', KEYS[1])
end
return r
$ redis-cli LPUSH list 1 2 3 4 5 6 7 8 9
(integer) 9
$ redis-cli --eval popall.lua list
1) "9"
2) "8"
3) "7"
4) "6"
5) "5"
6) "4"
7) "3"
8) "2"
9) "1"
$ redis-cli EXISTS list
(integer) 0
「LRANGE」と「DEL」はどちらもO(N)操作です。リストが空になるまで 'POP 'を実行すると、N * O(1)の操作が行われます。両方を組み合わせる方法はありますか? (O)N( – RaR