在redis列表中检索由ltrim修剪的值

时间:2016-10-11 18:15:33

标签: python redis

处理列表时redis中的常见设计模式是:

redis_server.lpush(list_name, element)
redis_server.ltrim(list_name, 0, 99)

(使用python语法来说明它)

如果在调用ltrim之前需要检索索引99之外的所有值,该怎么办?一种方法如下,但有没有更快的方式来做到这一点?

redis_server.lpush(list_name, element)
list_length = redis_server.llen(list_name)
extra = list_length - 100
while (extra > 0):
    item = redis_server.lpop(list_name)
    #do something with the item
    extra = extra - 1
redis_server.ltrim(list_name, 0, 99)

1 个答案:

答案 0 :(得分:1)

第一个解决方案是使用LRANGE

在一个请求中获取所有额外项目

redis_server.lpush(list_name, element) items = redis_server.lrange(list_name, 100, -1) # do something with the items redis_server.ltrim(list_name, 0, 99)

第二个解决方案,有点复杂,但可能更快(需要通过测试确认,不确定),因为它只需要一个请求而不是两个,就是写一个Lua脚本并使用EVALEVALSHA发送。但你可能不需要它,第一个当然是足够快。