List과 같은 소리가 나옵니다. LPUSH
또는 RPUSH
으로 목록에 추가 한 다음 키를 LRANGE
및 DEL
과 함께 모두 검색하십시오.
P. 목록을 저장하는 것과 같은 Redis의 키는 비워 둘 수 없습니다. 목록의 멤버를 모두 제거하면 키 자체가 더 이상 존재하지 않으므로 비워 두는 대신 키를 삭제하면됩니다.
OP의 의견에 대한 답변으로 업데이트되었습니다. 실제로는 무료 점심은 없으며 방법에 관계없이 O (N) 개의 읽기 및 삭제가 필요합니다. 하나의 반복 만 수행하는 것이 바람직한 경우가있다. 네트워크 통신을 줄이기 위해, 그러나 이것은 그들 중 하나가 아닙니다.
어떤 방식 으로든 루아와 함께 두 기능을 모두 사용할 수있는 가장 가까운 기능을 얻을 수 있습니다.
$ 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