TBMQ 如何使用 Redis 进行持久化消息存储

主要观点:TBMQ 主要用于聚合物联网设备数据并可靠传至后端应用,应用需可靠消息传递且常因维护等原因停机,物联网设备常频繁发布数据但订阅话题少。TBMQ 将 MQTT 客户端分为应用客户端和标准物联网设备(DEVICE 客户端),应用客户端持久连接依赖 Kafka,DEVICE 客户端可根据情况配置为持久连接。文章介绍了 TBMQ 中如何用 Redis 管理 DEVICE 客户端的持久 MQTT 会话,包括为何选择 Redis(解决 PostgreSQL 垂直扩展瓶颈)、迁移到 Redis 的过程(考虑 Redis 集群约束、原子操作 via Lua 脚本、选择合适 Redis 数据结构等)、动态管理排序集大小、消息检索和清理以及从 Jedis 迁移到 Lettuce 以提升性能等。

关键信息

  • TBMQ 架构及应用需求。
  • Redis 用于管理 DEVICE 客户端持久会话的优势和方法。
  • 迁移过程中的关键技术细节,如 Redis 集群约束、Lua 脚本原子操作、数据结构选择等。
  • 从 Jedis 迁移到 Lettuce 提升性能的过程及效果。

重要细节

  • Redis 集群通过哈希标签保证同一客户端相关数据在同一槽,避免多键操作错误。
  • Lua 脚本保证对同一 MQTT 客户端的操作原子性,避免不一致。
  • 选择 sorted sets 存储消息并结合字符串存储消息负载,通过哈希标签管理。
  • 动态管理排序集大小以控制内存使用,在消息检索时清理过期消息。
  • Jedis 同步操作限制 Redis 性能,迁移到 Lettuce 实现异步操作提升吞吐量。
阅读 31
0 条评论