Redis List,弹出而不删除

时间:2012-06-04 14:07:30

标签: java spring redis

我在我的Java应用程序中使用RedisTemplate(来自Spring)。我需要从相应值的元素列表中进行弹出,但不删除它。有什么建议吗?

4 个答案:

答案 0 :(得分:12)

您可以使用range命令轻松查看某个项目而不是弹出它。

使用Spring,从RedisTemplate实例,您可以使用opsForList()方法获取ListOperations实例,然后:

  • listOp.range(key,0,0)将返回第一个(左)项而不弹出它

  • listOp.range(key,-1,-1)将返回最后一个(右)项而不弹出它

请参阅以下文档:

http://static.springsource.org/spring-data/data-keyvalue/docs/1.0.x/api/org/springframework/data/keyvalue/redis/core/RedisTemplate.html

http://static.springsource.org/spring-data/data-keyvalue/docs/1.0.x/api/org/springframework/data/keyvalue/redis/core/ListOperations.html

答案 1 :(得分:0)

不确定如何使用RedisTemplate执行此操作,但要从列表中获取值,您可以使用redis命令:

LRANGE< LIST> 0 0

获取第一个值,其中< LIST>是你的名单的名称。

RedisTemplate中有类似的内容吗?

答案 2 :(得分:0)

Redis中是否有任何方法可以在不删除项目的情况下弹出项目但是在过期时间内保持休眠状态?在过期后(并且未删除),此项目会唤醒并再次弹出。

http://redis.io/commands/rpoplpush

模式:可靠的队列 Redis通常用作消息传递服务器来实现后台作业或其他类型的消息传递任务的处理。通常会获得一种简单形式的队列,将值推送到生产者端的列表中,并使用RPOP(使用轮询)在消费者端等待此值,如果客户端通过阻塞操作更好地服务,则使用BRPOP。 然而,在这种情况下,获得的队列是不可靠的,因为消息可能丢失,例如在存在网络问题的情况下或者如果消费者刚刚在接收到消息之后崩溃但是仍然要处理。 RPOPLPUSH(或阻塞变体的BRPOPLPUSH)提供了一种避免此问题的方法:使用者获取消息并同时将其推送到处理列表中。它将使用LREM命令,以便在处理完消息后从处理列表中删除消息。 另一个客户端可能会监视处理列表中剩余时间太长的项目,并在需要时将这些超时项目再次推送到队列中。

答案 3 :(得分:0)

我建议 rpoplpush ,从列表中弹出一个项目,然后将其压入另一个(也可以相同)键,这非常有用。它可以用作可靠的队列或圆形列表。 这是正式文件:https://redis.io/commands/rpoplpush