Spring data redis - 监听过期事件

2023-11-24

我想使用 KeyExpirationEventMessageListener 监听过期事件,但我找不到示例。

有人知道如何使用 Spring boot 1.4.3 和 Spring Data Redis 来做到这一点吗?

我目前正在做这个

    JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
    this.jedis = pool.getResource();
    this.jedis.psubscribe(new JedisPubSub() {
        @Override
        public void onPMessage(String pattern, String channel, String message) {
            System.out.println("onPMessage pattern " + pattern + " " + channel + " " + message);
            List<Object> txResults = redisTemplate.execute(new SessionCallback<List<Object>>() {
                public List<Object> execute(RedisOperations operations) throws DataAccessException {
                    operations.multi();
                    operations.opsForValue().get("val:" + message);
                    operations.delete("val:" + message);
                    return operations.exec();
                }
            });
            System.out.println(txResults.get(0));
        }
    }, "__keyevent@0__:expired");

我想直接使用Spring而不是Jedis。

Regards


不要使用KeyExpirationEventMessageListener当它触发时RedisKeyExpiredEvent这会导致失败RedisKeyValueAdapter.onApplicationEvent.

而是使用RedisMessageListenerContainer:

@Bean
RedisMessageListenerContainer keyExpirationListenerContainer(RedisConnectionFactory connectionFactory) {

    RedisMessageListenerContainer listenerContainer = new RedisMessageListenerContainer();
    listenerContainer.setConnectionFactory(connectionFactory);

    listenerContainer.addMessageListener((message, pattern) -> {

        // event handling comes here

    }, new PatternTopic("__keyevent@*__:expired"));

    return listenerContainer;
}

RedisMessageListenerContainer在自己的线程上运行所有通知。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring data redis - 监听过期事件 的相关文章

随机推荐

  • 使用 Django 上传多个文件

    如何使用 Django 上传多个文件 经过一番痛苦之后我最终得到了 uploadify http www uploadify com 与 django 一起工作 但问题并不是真正的 django 的问题 而是让它与 Apple Mac 一起
  • 如何在 Angular2 中操作特定路径上的组件

    我有一个简单的TopbarComponent这基本上在我的视图顶部添加了一个引导式导航栏 由于我的 90 的模板应该包含这个指令 我想通过我的app component看起来像这样 import Component selector my
  • Servlet 3.0 异步

    servlet 3 0 异步功能与以下内容有何区别 ld servlet 实现 doGet request response Thread t new Thread new Runnable void run heavy processin
  • 将映射应用于函数的剩余参数

    在 Clojure 中 如果我有一个函数 f defn f r 我有一个 seq args 其中包含我想要调用 f 的参数 我可以轻松使用 apply apply f args 现在 假设我有另一个函数 g 它被设计为采用任意数量的可选命名
  • 使用多个连接字符串

    Info我的解决方案中有多个项目 其中一个是 DAL 另一个是 ASP NET MVC6 项目 由于 MVC6 项目也是启动项目 我需要在其中添加连接字符串 I saw 这个解决方案 但不被接受 也不起作用 My Try 应用程序设置 js
  • 如何从 PDF 中提取表格作为文本

    我有一个 PDF 文件 其中包含表格 文本和一些图像 我想在 PDF 中有表格的地方提取表格 现在正在手动从页面中查找表 从那里我捕获该页面并保存到另一个 PDF 中 import pypdf import PdfReader PdfWri
  • R 中 GARCH 的模拟

    我正在对 GARCH 模型进行模拟 模型本身并不是太相关 我想问你的是关于优化 R 中的模拟 最重要的是 如果你看到任何矢量化的空间 我已经考虑过 但我看不到它 到目前为止我所拥有的是这样的 Let ht cond variance in
  • 获取已安装的 Android 应用程序列表

    您好 我想获取用户设备上所有已安装应用程序的列表 我已经在谷歌上搜索了很长时间 但找不到我想要的内容 但这个链接是最接近的 并且工作正常 除了我是新人不明白如何使用 getPackages 方法 并用它创建一个列表 http www and
  • abbr 标签的标题可以设置样式吗?

    采取以下代码
  • 有没有办法通过 NodeJS 检索文件/文件夹的唯一 ID?

    我面临的问题很简单 我想跟踪文件 文件夹 即使它已被重命名 删除等 NodeJS 是否提供了访问文件中这些信息的方法 我尝试过默认文件系统模块fs stats https nodejs org api fs html fs class fs
  • “ArrayAdapter 要求资源 ID 为 TextView”XML 问题

    尝试设置视图以显示时出现错误ListView对于我想显示的文件 文本文件 我很确定这与 XML 有关 我只想显示来自的信息this file fileop ReadFileAsList Installed packages txt 我的代码
  • jCarousel - 如何通过自动滚动在悬停时暂停?

    JCarousel 最近发生了变化 2011 年 1 月 它曾经有一种方法可以通过自动滚动实现悬停暂停 在新版本中 我无法解决如何让自动滚动在悬停时停止 我希望滚动在鼠标悬停时停止并在鼠标移出时重新开始 有什么建议么 示例代码在这里 htt
  • HTML 无法更改 Div 的高度

    所以我正在开发井字游戏 但由于某种原因我的 div 不会改变它们的高度 html background color black color white text align center cell border 1px solid whit
  • 在 SQL LIKE 子句中使用 SqlParameter 不起作用

    我有以下代码 const string Sql select distinct name from tblCustomers left outer join tblCustomerInfo on tblCustomers Id tblCus
  • Firebase OrderByKey 的 startAt 和 endAt 给出错误的结果

    我有 3 个带有键的对象 如下所示 它们的格式为 YYYYMMDD 我正在尝试获取一个月的数据 但我没有得到所需的输出 当我这样查询时 var ref db child KPXECP6a1pXaM4gEYe0 ref orderByKey
  • Bootstrap 模态框不显示

    我想测试 Bootstrap 的模式元素并创建了一个小测试页面 但什么也没有出现 我想知道为什么 有什么线索吗 我从引导页面获取了源代码 我的测试页面位于http ronhome no ip org bootstrap modal html
  • Woocommerce,根据运输类别隐藏运输方法

    我试图根据运输类别隐藏除一种运输方法之外的所有运输方法 本质上是在选择属于特定类别的产品时强制使用 FedEx 隔夜方法 我从这段代码 并将其修改如下 add filter woocommerce available shipping me
  • 如何更改Flutter Web应用程序的默认Web服务器IP(127.0.0.1)

    更改flutter web App的默认IP 127 0 0 1 我创建了一个 flutter Web 应用程序 当我运行该 Web 应用程序时 分配的 IP 是 127 0 0 1 但我无法通过 LAN 使用本地 IP 访问同一应用程序
  • 如何纠正 v4.DrawerLayout 中的 NullPointerException? [复制]

    这个问题在这里已经有答案了 我正在尝试实现一个导航抽屉 但由于某些原因我得到了这个空指针异常 我在这上面花了很多时间 但毫无结果 这是我的代码的一部分 我不明白为什么它返回空指针异常 我需要导入任何库吗 提前致谢 package com m
  • Spring data redis - 监听过期事件

    我想使用 KeyExpirationEventMessageListener 监听过期事件 但我找不到示例 有人知道如何使用 Spring boot 1 4 3 和 Spring Data Redis 来做到这一点吗 我目前正在做这个 Je