分布式锁(redisson)完成延迟触发功能

本文介绍如何使用 Redisson 的过期时间特性,结合 Java 编程实现延迟触发功能。通过设置带有过期时间的缓存映射,并监听过期事件,可以精确控制任务的延迟执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录:利用分布式锁(redisson)完成延迟触发功能

今天遇到一个延迟任务 上网查了很多资料 最终选择利用redisson的过期时间来完成。redisson 是Java操作redis的一个api 还支持各种 过期以及异步操作等,功能挺强大(主要是我想偷懒)
记录下自己写的。

1.利用redisson下的封装类RedissonClient调用getMapCache方法 缓存映射名称:它能够保留插入元素的顺序,并且可以指明每个元素的过期时间(专业一点叫元素淘汰机制)。另外还为每个元素提供了监听器,提供了4种不同类型的监听器。有:添加、过期、删除、更新四大事件。当然这里我用“过期”来实现延迟发送 。好了我直接上代码了

1.设置过期时间和监听类

/**
 * @author raito
 * @desc
 * @date 2020-05-14
 */
@Slf4j
@Service
public class RedissonBusinessApiImpl implements RedissonBusinessApi {

    @Autowired
    private RedissonClient redissonClient;

    @Autowired
     private MessageListener messageListener;

    /**
     * redis延迟消息
     *
     * @param num   唯一标识
     * @param msg   消息
     * @param miute 延迟时间
     */
    @Override
    public void redissonDelay(String num, String msg, Long miute) {
        //设置缓存映射的标识 这个标识自定义
        RMapCache<String, String> rMapCache = redissonClient.getMapCache("redisMessage");
        //设置缓存的时间和数据信息 TimeUnit.MILLISECONDS这个是 设置时间单位
        rMapCache.put(num, msg, miute, TimeUnit.MILLISECONDS);
        //监听方法触发类 redis过期就执行这个 messageListene类里的方法
        rMapCache.addListener(messageListener);
    }

2.设置监听的接收实现类

/**
 * @author raito
 * @desc 接收过期时间并执行方法
 * @date 2020-05-14
 */
@Slf4j
@Component
public class MessageListener implements EntryExpiredListener<String, String> {

    @Autowired
    private RedisCacheUtil redisCacheUtil;

    @Override
    public void onExpired(EntryEvent<String, String> entryEvent) {
        //设置锁 ----》防止重复执行方法  我默认的是3 秒 
        if (redisCacheUtil.setTimeOutLock(entryEvent.getKey(), UUID.randomUUID().toString())) {
            log.info("有收到延迟消息通知:{}", entryEvent.getKey());
            log.info("当前时间:{},收到数据key:{},value:{}", new Date().toString(), entryEvent.getKey(), entryEvent.getValue());
        }
    }
}

完成 我们来看看执行效果
在这里插入图片描述成功了 啦啦啦 我成功偷懒了 ✌

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值