python - 你是如何一次性弹出redis中的所有值的

标签 python redis

我在 redis 键中有一个列表 :test

[{'a': 2, 'b': 3}, {'a': 1, 'b': 2}, 
{'a': 2, 'b': 4}, {'a': 1, 'b': 5}]

我可以用 r_list 获取 key:test 的所有元素

r_server.set_response_callback('RPOP', ast.literal_eval)
r_list = []
len = r_server.llen("test")
for item in range( r_server.llen("test") ):
    r_list.append(r_server.rpop("test"))

我想知道Redis是否支持pop all values
我的意思是我不必对它进行读写操作来获取所有数据并将其删除

最佳答案

您可以使用 LRANGE 获取列表的所有元素并从 Redis 中删除键:

def lrange_literal_eval(lst):
    return [ast.literal_eval(x) for x in lst]

r_server.set_response_callback('LRANGE', lrange_literal_eval)

r_list = r_server.lrange('test', 0, -1)
r_list.reverse()
r_server.delete('test')

如果您需要此操作是原子的,请使用管道或 Lua 脚本。

Redis 管道示例:

def lrange_literal_eval(lst):
    return [ast.literal_eval(x) for x in lst]

r_server.set_response_callback('LRANGE', lrange_literal_eval)

with r_server.pipeline() as pipe:
    pipe.lrange('test', 0, -1).delete('test')
    r_list = pipe.execute()[0]
    r_list.reverse()

关于python - 你是如何一次性弹出redis中的所有值的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34629204/

相关文章:

python - Python 中类似 JSON 的对象

javascript - socket.io - 从匿名函数中发出

javascript - 如何将 HashMap 数组插入 Redis? ( Node .js)

java - 需要 "increment"中 "jedis"的一些建议

python - 如何连接到 Django 中的 redis?

python - 有人可以向我解释 Dixon 分解算法的这一部分吗?

python - Pandas 按组聚合和列排序

python - 如何将2个脚本组合在一起?

python - 在Python中从剪贴板复制内容时出现tkinter错误

nosql - 与nosql的信息重复?