你是怎么一次用redis弹出所有的valus的?

时间:2016-01-06 09:05:42

标签: python redis

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

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

我可以获得密钥的所有元素:使用r_list

进行测试
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是否支持弹出所有值 我的意思是我不需要用它来获取所有数据并将其删除

2 个答案:

答案 0 :(得分:0)

您可以使用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()

答案 1 :(得分:0)

您只需使用LRANGE命令一次性检索所有项目。

检查Link