首页 > 数据库 >redis-数据类型List的安全队列和不安全队列

redis-数据类型List的安全队列和不安全队列

时间:2022-08-17 18:11:24浏览次数:67  
标签:队列 数据类型 元素 redis 安全 消息 RPOPLPUSH 客户端

在学习RPOPLPUSH命令的时候,官方文档中有提到安全队列和不安全的队列,一开始没有看懂,现在理解了做个笔记。

 

一般情况下,我们可以借助List来实现消息队列,比如一个客户端通过命令LPUSH(BLPUSH)把消息入队,另一个客户端通过命令RPOP(BRPOP)获取消息。这种方式实现的队列是不安全的。

 

为什么是不安全的呢?因为RPOP命令的特性:会移除list的队尾元素(消息),并将这个元素(消息)返回给客户端。这意味着该元素就只存在于客户端的上下文中,redis服务器中没有这个元素了,如果客户端在处理这个返回元素的过程崩溃了,那么这个元素就永远丢失了。这种情况导致:客户端虽然成功收到了消息,但是却没有处理它。

 

那怎么来实现一个安全的队列呢?可以使用redis的 RPOPLPUSH (或者其阻塞版本的 BRPOPLPUSH)命令。

 

RPOPLPUSH命令格式:RPOPLPUSH source destination 。RPOPLPUSH命令原子性地返回并移除 source 列表的最后一个元素, 并把该元素放入 destination 列表的头部。使用这个命令就可以实现安全队列。

 

因为使用 RPOPLPUSH 获取消息时,RPOPLPUSH 会把消息返给客户端,同时把该消息放入一个备份消息列表,并且这个过程是原子的,可以保证消息的安全。当客户端成功的处理了消息后,就可以把此消息从备份列表中移除了。如果客户端因为崩溃的原因没有处理某个消息,那么就可以从备份列表destination中重新获取并处理这个消息。


转载自:https://blog.csdn.net/aitangyong/article/details/51980702

标签:队列,数据类型,元素,redis,安全,消息,RPOPLPUSH,客户端
From: https://www.cnblogs.com/amber10086/p/16596252.html

相关文章

  • 第四章 1 数据类型 - 数字型 练习题
    第四章1数据类型-数字型练习题基础知识1\表达式int("123",16)的值为:2912\表达式int("123",8)的值为:833\表达式int("123")的值为:1234\表达式int("101",2)的值......
  • postgreSQL数据类型
    1.数字类型(部分)Name           存储大小                 描述               ......
  • redis数据类型篇
    查看库下有多少个key127.0.0.1:6379>dbsize(integer)4查询redis库信息redis没有类似于selectdatabase();这样的查询方式且redis的数据库数量一般默认是16个,在配......
  • 使用 Canal 和 Kafka 与 RDS MySQL 进行 Redis 数据同步
    教程:https://www.alibabacloud.com/blog/redis-data-synchronization-with-rds-mysql-using-canal-%26-kafka_598072源码:https://github.com/alibabacloud-howto/soluti......
  • 【Java基础】8种基础数据类型和String类型
    变量必须先声明,后使用1.变量分类(1)按数据类型分(2)按声明的位置分2.基本数据类型和String类型(1)整型整型占用存储空间byte1字节=8bitshort2字节int4......
  • 队列:队列在线程池等有限资源池中的应用
    目录如何理解“队列”?顺序队列和链式队列循环队列阻塞队列和并发队列阻塞队列并发队列线程池没有空闲线程时,新的任务请求线程资源时,线程池该如何处理?各种处理策略又是如何......
  • Redis Desktop Manager for Mac(Redis可视化工具) v2021.10.236中文版
    mac软件下载:https://mac.macsc.com/mac/2697.html?id=MzI1OTY2 RedisDesktopManagermac版是一个快速、简单、支持跨平台的RedisDB管理工具,专为Mac用户设计,基于Qt5......
  • redis hash
    在redis的value中以键值对存储数据  hsethashnamexage18addresshefei插入元素hgethashname输出元素"x"hgethashage"18"hgethashaddress"......
  • 消息队列对比
    RabbitMQ轻量、开箱即用对消息堆积支持差,大量消息积压时,性能会急剧下降性能差,每秒钟可以处理几万到十几万条消息由Erlang开发RocketMQ(设计参考了Kafka,ali->Apa......
  • redis set
    Set类型Set集合元素无序 无序指添加key中的value无序不可以重复  常用命令saddset12345 输入smembersset 输出每次结果可能不一样 对应set无序......