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