首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Redis的定时任务

基于Redis的定时任务

作者头像
冷冷
发布2018-02-08 12:24:32
2K0
发布2018-02-08 12:24:32
举报
文章被收录于专栏:冷冷冷冷

基于Redis的定时任务

最近遇到一个业务场景,某次活动开始后要在250秒后自动关闭,然后修改活动的状态。考虑一下可以用传统的定时任务去处理

  • 会出现250秒时间的延时问题,比如某次任务刚刚结束,但是定时任务在前一秒就结束了,那么活动虽然结束了,那么还要再等一个定时任务才能执行,时效性不行。

针对这个业务需求,我们采用 Redis (2.8.0+版本)的订阅发布模式 ,当key过期时触发相关事件。

redis配置

Redis 配置文件的具体配置:

#
#  Example 2: to get the stream of the expired keys subscribing to channel
#  获取订阅channel的过期的key
#  channel名称: __keyevent@0__:expired 
#
notify-keyspace-events Ex
#
#  By default all notifications are disabled because most users don't need
#  this feature and the feature has some overhead. Note that if you don't
#  specify at least one of K or E, no events will be delivered.
#  默认情况下,所有通知都被禁用,因为大多数用户不需要这个功能和功能有一些开销
#  请注意,如果没有指定K或E中的至少一个,不会传送任何事件。
#
#  notify-keyspace-events ""

redis.conf 的配置如上,我也加上了相关注释。

jfinal配置

public class LmsCoreConfig extends JFinalConfig {
 
    /**
     * 启动后回调,使用异步,不然线程阻塞
     */
    public void afterJFinalStart() {
        FutureTask futureTask = new FutureTask(() -> {
            Redis.use().getJedis().subscribe(new KeyExpiredListener(), "__keyevent@0__:expired");
            return null;
        });
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        executorService.submit(futureTask);
    }

}

/**
*  监听redis key过期的监听器
*/
public class KeyExpiredListener extends JedisPubSub {
    @Override
    public void onMessage(String channel, String message) {
        // message 对应 key值
        //TODO key过期后的业务代码。
    }
}

测试

我们通过redis-cli  设置几个有过期时间的key测试一下

127.0.0.1:6379> SET test 123
OK
127.0.0.1:6379> EXPIRE test 60
(integer) 1

60秒触发KeyExpiredListener监听器

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于Redis的定时任务
    • redis配置
      • jfinal配置
        • 测试
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档