文档出处:redisdoc.com/list/rpoplpush.html

模式: 安全的队列 Redis的列表经常被用作队列(queue),用于在不同程序之间有序地交换消息(message)。一个客户端通过 LPUSH key value [value …] 命令将消息放入队列中,而另一个客户端通过 RPOP key 或者 BRPOP key [key …] timeout 命令取出队列中等待时间最长的消息。 不幸的是,上面的队列方法是『不安全』的,因为在这个过程中,一个客户端可能在取出一个消息之后崩溃,而未处理完的消息也就因此丢失。 使用 RPOPLPUSH 命令(或者它的阻塞版本 BRPOPLPUSH source destination timeout )可以解决这个问题:因为它不仅返回一个消息,同时还将这个消息添加到另一个备份列表当中,如果一切正常的话,当一个客户端完成某个消息的处理之后,可以用 LREM key count value 命令将这个消息从备份表删除。 最后,还可以添加一个客户端专门用于监视备份表,它自动地将超过一定处理时限的消息重新放入队列中去(负责处理该消息的客户端可能已经崩溃),这样就不会丢失任何消息了。
模式:循环列表 通过使用相同的 key 作为 RPOPLPUSH 命令的两个参数,客户端可以用一个接一个地获取列表元素的方式,取得列表的所有元素,而不必像 LRANGE key start stop 命令那样一下子将所有列表元素都从服务器传送到客户端中(两种方式的总复杂度都是 O(N))。 以上的模式甚至在以下的两个情况下也能正常工作: 有多个客户端同时对同一个列表进行旋转(rotating),它们获取不同的元素,直到所有元素都被读取完,之后又从头开始。 有客户端在向列表尾部(右边)添加新元素。 这个模式使得我们可以很容易实现这样一类系统:有 N 个客户端,需要连续不断地对一些元素进行处理,而且处理的过程必须尽可能地快。一个典型的例子就是服务器的监控程序:它们需要在尽可能短的时间内,并行地检查一组网站,确保它们的可访问性。 注意,使用这个模式的客户端是易于扩展(scala)且安全(reliable)的,因为就算接收到元素的客户端失败,元素还是保存在列表里面,不会丢失,等到下个迭代来临的时候,别的客户端又可以继续处理这些元素了。

可以看出 源列表右端3被移除转移到了destination列表里面,客户端并且做出了返回3的动作

最新文章

  1. [LeetCode] Regular Expression Matching 正则表达式匹配
  2. Java synchronized同步 各方式略解
  3. Jquery和JS获取ul中li标签(转)
  4. RabbitMQ 通过记日志来看routingkey
  5. 尝试在Linux上编译KestrelHttpServer
  6. 简明 Vim 练级攻略(转)
  7. LeetCode:Search Insert Position,Search for a Range (二分查找,lower_bound,upper_bound)
  8. python数据类型之dict
  9. Django数据库操作
  10. 超赞值得一试的六款jQuery插件和CSS3应用
  11. E-BOM和M-BOM的区别
  12. [linux]ubuntu14.04通过apt-get安装软件失败
  13. golang使用 gzip压缩
  14. python要点简要-一日精通python
  15. sql中的内联和外联(简单用法)
  16. Unity的几个特殊文件夹
  17. 为Qemu aarch32开发板添加sd卡
  18. java的XML解析(DOM4J技术)
  19. 摄像头驱动0V7725学习笔记连载(三):0V7725 SCCB时序的实现
  20. TQ2440之定时器中断0——volatile关键字的重要作用

热门文章

  1. sql-1-准备
  2. 计算机基础-Socket
  3. PostgreSQL数据库结构
  4. odoo中Controller
  5. 用activiti实现类似钉钉审批流程-附整个系统源码
  6. 01.泛型Generic
  7. K8s之Prometheus监控
  8. 裸奔mysql
  9. 大数据学习(16)—— HBase环境搭建和基本操作
  10. Linux 基础指令初识