开发者社区 > 数据库 > NoSQL数据库 > 正文

Redis中的PrepareQueue如何设计?

已解决

Redis中的PrepareQueue如何设计?

展开
收起
游客lmkkns5ck6auu 2022-10-11 17:20:45 299 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    为了保障RMQ消息队列的可用性,做到每条消息至少消费一次,消费者不是直接pop有序集合中的元素,而是将元素从StoreQueue移动到PrepareQueue并返回消息给消费者,等消费成功后再从PrepareQueue从删除,或者消费失败后从PreapreQueue重新移动到StoreQueue,这便是根据二阶段提交的思想实现的二阶段消费。

    在后面将会详细介绍二阶段消费的实现思路,这里重点介绍下PrepareQueue的存储设计。

    StoreQueue中每一个Slot对应PrepareQueue中的Slot,PrepareQueue的SlotKey设计为prepare{#{topic}#{index}}。PrepareQueue采用Sorted Set作为存储,消息移动到PrepareQueue时刻对应的(秒级时间戳*1000+重试次数)作为分数,字符串存储的是消息体内容。这里分数的设计与重试次数的设计密切相关,所以在重试次数设计章节详细介绍。

    PrepareQueue的SlotKey设计中需要注意的一点,由于消息从StoreQueue移动到PrepareQueue是通过Lua脚本操作的,因此需要保证Lua脚本操作的Slot在同一个Redis节点上。以上内容摘自《阿里开发者手册-Redis专题》电子书,点击https://developer.aliyun.com/ebook/download/7770 可下载完整版

    2022-10-12 23:08:51
    赞同 展开评论 打赏

阿里云NoSQL数据库提供了一种灵活的数据存储方式,可以支持各种数据模型,包括文档型、图型、列型和键值型。此外,它还提供了一种分布式的数据处理方式,可以支持高可用性和容灾备份。包含Redis社区版和Tair、多模数据库 Lindorm、MongoDB 版。

相关产品

  • 云数据库 Tair(兼容 Redis)
  • 相关电子书

    更多
    Redis在唯品会的应用实践——架构演进与功能定制 立即下载
    微博的Redis定制之路 立即下载
    云数据库Redis版的开源之路 立即下载