我是 Redis
的新手,发现 Redis
支持多种数据结构,我们可以根据需要选择其中的任何一种。我的要求是将字符串一个一个地插入到列表(key-list
)中,并希望一次检索(和删除)所有字符串。而且我也想经常这样做,所以试图找到一种最佳方式。哪种数据结构/方式对此更好?提前谢谢你
P.S:我不想在检索的时候去掉key,我只需要检索并清空列表即可。
最佳答案
听起来你应该使用 List .使用 LPUSH
添加到列表中或 RPUSH
,然后使用 LRANGE
检索所有内容和 DEL
关键。
附言Redis中的key,比如存放List的key,不能为空。删除列表的所有成员后, key 本身将不再存在,因此您只需删除它而不是尝试清空它。
更新了对 OP 评论的回答:并非如此,天下没有免费的午餐,无论采用何种方法,您都必须执行 O(N) 次读取和删除操作。在某些情况下,最好只执行一次迭代,例如减少网络通信,但这不是其中之一。
无论如何,就功能而言,最接近两者组合的是 Lua。但是请注意,这不一定比 LRANGE
和 DEL
表现更好:
$ 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
关于data-structures - Redis - 一个一个地插入字符串并一次全部删除的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40838793/