redis 慢消费_使用Redis和定时实现延时消费

本文介绍了如何利用Redis的ZSet数据结构实现延时消费功能。由于开源RocketMQ不支持自由指定延时级别,作者选择了Redis配合定时任务来达成需求。生产者通过`zSetAdd`方法将消息以时间戳作为score加入集合,消费者则通过`zSetRangeByScore`查询并处理符合条件的消息,随后使用`zSetRemoveRangeByScore`移除已处理的消息。这种方法避免了对数据库的压力,实现了灵活的延时消费。
摘要由CSDN通过智能技术生成

背景:

项目业务上需要实现延时发送消息的需求。最开始想到的就是消息中间件,公司统一用的RocketMq,于是开始整。。。但是,业务需求要求的延时消息时间是可自由指定的,但是公司居然用的是开源的RocketMq,开源的只支持18个固定级别的延时,

我们这里不重点说RocketMq,有兴趣的自己查吧。结论就是开源的RocketMq没法实现现在的需求,要不就用阿里云的,公司也不愿出那份钱吧。哈哈哈。于是想别的方法。

办法二。那就只能定时轮询配合实现了,查数据库的话,会增加数据库的压力,效率也不好。于是使用Redis配合定时实现延时消费。

Redis实现代码

使用zSet数据结构

生产者代码:

//key:redis,zSet集合key

//msg:key的value值,存储消息对象

//execTime:执行时间,时间戳

public void producerRedisDelayMsg(String key, Object msg, longexecTime) {

redisService.zSetAdd(key, msg, execTime);

}

调用的zSetAdd方法实际就是对redis的操作,重点就是时间戳为score这个值,集合就是通过这个值进行排序的

public boolean zSetAdd(String key, Object value, longscore) {booleanre;try{

re=redisTemplate.opsForZSet().add(key, va

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值