Redis 的列表经常被用作队列 (queue),用于在不同程序之间有序地交换消息 (message)。一个客户端通
过LPUSH 命令将消息放入队列中,而另一个客户端通过RPOP 或者BRPOP 命令取出队列中等待时间最长
的消息。
不幸的是,上面的队列方法是『不安全』的,因为在这个过程中,一个客户端可能在取出一个消息之后崩
溃,而未处理完的消息也就因此丢失。
使用RPOPLPUSH 命令 (或者它的阻塞版本BRPOPLPUSH ) 可以解决这个问题:因为它不仅返回一个消
息,同时还将这个消息添加到另一个备份列表当中,如果一切正常的话,当一个客户端完成某个消息的处理
之后,可以用LREM 命令将这个消息从备份表删除。
最后,还可以添加一个客户端专门用于监视备份表,它自动地将超过一定处理时限的消息重新放入队列中去
(负责处理该消息的客户端可能已经崩溃),这样就不会丢失任何消息了。
过LPUSH 命令将消息放入队列中,而另一个客户端通过RPOP 或者BRPOP 命令取出队列中等待时间最长
的消息。
不幸的是,上面的队列方法是『不安全』的,因为在这个过程中,一个客户端可能在取出一个消息之后崩
溃,而未处理完的消息也就因此丢失。
使用RPOPLPUSH 命令 (或者它的阻塞版本BRPOPLPUSH ) 可以解决这个问题:因为它不仅返回一个消
息,同时还将这个消息添加到另一个备份列表当中,如果一切正常的话,当一个客户端完成某个消息的处理
之后,可以用LREM 命令将这个消息从备份表删除。
最后,还可以添加一个客户端专门用于监视备份表,它自动地将超过一定处理时限的消息重新放入队列中去
(负责处理该消息的客户端可能已经崩溃),这样就不会丢失任何消息了。