redis实现可靠的队列

用redis brpop 或 blpop命令可以实现可靠的队列。  
其命令格式如:  
brpop|blpop list1 list2 list3 ... timeout  
  
参数:  
    list     列表集  
    timeout  阻塞时间,当 timeout 为 0 是表示阻塞时间无限制。  
      
返回值:  
    返回一个存在于 list1 或 list2 或 list3 里的元素(因为它是从 list1 –> list2 –> list3 这个顺序查起的第一个非空列表)。  
如:  
127.0.0.1:6379> brpop mylist1 0  
    1) "mylist1"  
    2) "dd"  
注:第一个元素是弹出元素的 key,第二个元素是 value。  
  
清空列队:  
127.0.0.1:6379>del mylist1   
  
当 brpop|blpop 返回一个元素给客户端的时候,它也从 list 中把该元素移除。这意味着该元素就只存在于客户端的上下文中:如果客户端在处理这个返回元素的过程崩溃了,那么这个元素就永远丢失了。  
在一些我们希望是更可靠的消息传递系统中的应用上,这可能会导致一些问题。在这种时候,请查看 BRPOPLPUSH 命令,这是 BLPOP 的一个变形,它会在把返回元素传给客户端之前先把该元素加入到一个目标 list 中。  
BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本。  
命令格式:  
    BRPOPLPUSH list_source list_destination timeout  
元素从 list_source 中弹出来,并压入 list_destination 中。当 list_source 包含元素的时候,这个命令表现得跟 RPOPLPUSH 一模一样。 当 list_source 是空的时候,Redis将会阻塞这个连接,直到另一个客户端 push 元素进入或者达到 timeout 时限。 timeout 为 0 能用于无限期阻塞客户端。  
127.0.0.1:6379> lrange list1 0 -1  
(empty list or set)  
127.0.0.1:6379> lrange mylist 0 -1  
1) "d"  
2) "c"  
127.0.0.1:6379> brpoplpush mylist list1 0  
"c"  
  
127.0.0.1:6379> lrange list1 0 -1  
1) "c"  
127.0.0.1:6379> lrange mylist 0 -1  

1) "d"  




https://blog.csdn.net/u011341352/article/details/54139153

阅读更多
个人分类: redis
上一篇Redis双链表实现安全队列
下一篇看完让你彻底搞懂Websocket原理
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭