社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
简单描述一下需求(跳出复杂的业务,简单描述一下):
机构甲会给机构乙推送任务,然后每个不同类型的任务比如A/B…等都可以设置不同的超时时间,当这条任务(我们以taskId来看作是一条唯一的任务)到期时后台调用方法去发送微信通知。
大概的需求就是上面的了。
思路:
zadd(Integer.parseInt(map.get("mins")) * 60 * 1000 + System.currentTimeMillis());
将该任务到期的时间写入redis的sorted set中。zrangeByScore(key, 0, currentTimeMillis);
获取0到当前时间内的元素zrem(key, member);
移除有序set中的元素解释一下,比如你当前时间是1, 加了3就是4然后你将4插入zset中. 然后currentTime是3, 这时候就没算到期,但当currentTime等于4或者5的时候就会将该元素弹出。
这种适用于对于提醒的要求没有即时性的要求。就是说一小时到期了,我不要求精准在到期的那一刻提醒,多几秒多几分都无所谓的这种。
实际场景下
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!