我在 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/