我将去重的逻辑 统一抽象 为:在 X时间段 内达到了 Y阈值 。去重实现的步骤可以简单分为:
- 从Redis获取记录
- 判断Redis存在的记录是否符合条件
- 符合条件的则去重,不符合条件的则重新塞进Redis

这里我使用的是 模板方法模式 , deduplication 方法已经定义好了定位,当有新的去重逻辑需要接入的时候,只需要继承 AbstractDeduplicationService 来实现 deduplicationSingleKey 方法即可。
比如,我以相同内容发送给同一个用户的去重逻辑为例:


在这场景下,我使用Redis都是用 批量 操作来减少请求Redis的次数的,这对于我们这种业务场景(在消费的时候需要大量请求Redis,使用 批量操作 提升还是很大的)
由于我觉得使用的场景还是蛮多的,所以我封装了个RedisUtils工具类,并且可以发现的是:我对操作Redis的地方都用 try catch 来包住。 即便是Redis出了故障,我的核心业务也不会受到影响 。
