Redis List,弹出而不删除

2022-09-03 05:38:15

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


答案 1

您可以轻松地查看项目,而不是通过使用 range 命令将其弹出。

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

  • 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


答案 2

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

http://redis.io/commands/rpoplpush

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


推荐