data-structures - Redis - 一个一个地插入字符串并一次全部删除的数据结构

标签 data-structures redis redis-cli

我是 Redis 的新手,发现 Redis 支持多种数据结构,我们可以根据需要选择其中的任何一种。我的要求是将字符串一个一个地插入到列表(key-list)中,并希望一次检索(和删除)所有字符串。而且我也想经常这样做,所以试图找到一种最佳方式。哪种数据结构/方式对此更好?提前谢谢你

P.S:我不想在检索的时候去掉key,我只需要检索并清空列表即可。

最佳答案

听起来你应该使用 List .使用 LPUSH 添加到列表中或 RPUSH ,然后使用 LRANGE 检索所有内容和 DEL关键。

附言Redis中的key,比如存放List的key,不能为空。删除列表的所有成员后, key 本身将不再存在,因此您只需删除它而不是尝试清空它。

更新了对 OP 评论的回答:并非如此,天下没有免费的午餐,无论采用何种方法,您都必须执行 O(N) 次读取和删除操作。在某些情况下,最好只执行一次迭代,例如减少网络通信,但这不是其中之一。

无论如何,就功能而言,最接近两者组合的是 Lua。但是请注意,这不一定比 LRANGEDEL 表现更好:

$ 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/

相关文章:

c - 使用 malloc 的多个数组

performance - 两个未排序的单链表到一个已排序的单链表

data-structures - Solidity 数组有 pop 功能吗?

php - Redis 在大约 24 小时后拒绝连接

git - 您如何管理项目中的第三人称 git 存储库? (例如 Twig/Assetic/..)

python - 如何在redis-py中指定 ">"

node.js - 为什么我的 Redis 实例每 2 分钟就会出现一次连接超时?

java - 在 Spring Data Redis 中,如何将多个键传递给超时的 leftpop() (rightpop()) 方法?

redis - 如何为 redis-cli 命令设置超时?

amazon-web-services - redis 上的 keys 命令行为与 aws 上的 redis 集群