基于Redis如何去实现消息的去重功能?

去重和幂等的本质就是业务Key再加上存储

代码的实现核心只有两个:频次去重和内容去重

首先主模块名为deduplication;

其下分为三个模块分别为:1.build负责构建去重参数 2.limit实现去重逻辑 3.service实现去重服务;

DeduplicationHolder 负责起到工厂作用 DedupicationParam 是去重参数DTO DeduplicationRuleService 去重入口;

工作流程:
线程池拉取到MQ中的消息后,数据会进入到Task类里run方法里面,然后进入到service入口,首先读取去重的参数配置(由分布式配置中心负责),一共定义两种去重逻辑写在DeduplicationType枚举上,然后后续获取出来负责根据去重的类型冲儿构建出我们的去重参数;

去重参数(消息信息,去重时间,去重次数,去重相关的埋点信息),通过for加强以此对消息进行去重判断,进行消息去重。

去重和幂等的本质就是业务Key再加上存储,这里内容去重的业务Key用的是消息的ID(模板ID)再加上消息发送人(接收人)再加上他的内容(消息内容)构建的。拿到业务Key后具体的实现是通过Redis的Lua脚本进行去重,最后去重实现的算法通过zset结构实现滑动窗口

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值