zoukankan      html  css  js  c++  java
  • springboot使用Redis,监听Redis键过期的事件设置与使用代码

    我使用的是Windows下的Redis服务,所以一下Redis设置都是在Windows平台进行。

    1、修改Redis配置文件

    1.1:Windows下的Redis存在两个配置文件

    修改带有service的配置文件才会有效。

    打开配置文件,找到下面一行代码:

    notify-keyspace-events ""

    然后修改配置,如下图配置:

    很简单,替换注释一下就好。

    2、重启Redis服务

    重启Redis服务有两种方式:

    1、直接win+R,打开运行对话框,输入Services.msc,打开服务列表。然后找到Redis服务重启就好了。

    2、打开cmd命令窗口,输入下面命令:

       redis-server --service-stop

    关闭成功!!

    3.打开cmd命令窗口,输入下面命令:

      redis-server --service-start

    开启成功!!

     

    3、在springboot项目中配置Redis配置

     我的项目使用的是springboot2.0.5,所以一下配置适用springboot2.0.5项目,其他版本没试过。

    两种方式:

    第一种:指定:__keyevent@0__:expired,监听指定的db键的过期事件。

    Redis配置第一步:

    /**
     * TODO Redis配置
     * @author zhuzhen
     * @date 16:20 2018/12/18
     */
    @Configuration
    @EnableCaching
    public class RedisConfig extends CachingConfigurerSupport {
    
        /**
         * TODO 监听 Redis键过期事件
         * @author zhuzhen
         * @date 14:38 2018/12/21
         * @param connectionFactory
         * @return org.springframework.data.redis.listener.RedisMessageListenerContainer
         */
        @Bean
        RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
            RedisMessageListenerContainer container = new RedisMessageListenerContainer();
            container.setConnectionFactory(connectionFactory);
            container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired"));
            return container;
        }
    
    }

    Redis配置第二步:

    实现MessageListener接口:

    /**
     * @author zhuzhen
     * @version 1.0
     * @description TODO 自定义Redis过期监听事件
     * @className com.nongcai.rabbitmq.demo.redis.RedisExpiredListener
     * @date 2018/12/21 14:42
     */
    public class RedisExpiredListener implements MessageListener {
    
        @Override
        public void onMessage(Message message, byte[] bytes) {
            // 建议使用: valueSerializer
            byte[] body = message.getBody();
            byte[] channel = message.getChannel();
            //Redis数据的键
            String redisId = new String(body);
    
            System.out.println("onMessage >> " );
            System.out.println(String.format("channel: %s 
     body: %s 
     bytes: %s"
                    ,new String(channel), new String(body), new String(bytes)));
    
        }
    }

     第二种:监听所有的db键的过期事件。

    Redis配置第一步:配置监听bean

     /**
         * TODO 监听 Redis键过期事件
         * @author zhuzhen
         * @date 14:38 2018/12/21
         * @param connectionFactory
         * @return org.springframework.data.redis.listener.RedisMessageListenerContainer
         */
        @Bean
        RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
    
            RedisMessageListenerContainer container = new RedisMessageListenerContainer();
            container.setConnectionFactory(connectionFactory);
    //        container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired"));
            return container;
        }

    Redis配置第二步:

    /**
     * @author zhuzhen
     * @version 1.0
     * @description TODO 监听所有db的过期事件__keyevent@*__:expired"
     * @className com.nongcai.rabbitmq.demo.redis.RedisKeyExpirationListener
     * @date 2018/12/21 14:39
     */
    @Component
    public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    
        public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
            super(listenerContainer);
        }
    
        @Override
        public void onMessage(Message message, byte[] pattern) {
            // 用户做自己的业务处理即可,注意message.toString()可以获取失效的key
            System.out.println("message>>>  " + message);
            System.out.println("pattern>>>  " + new String(pattern));
            String expiredKey = message.toString();
            System.out.println("Redis的键:" + expiredKey);
    
        }
    }

    自此,监听Redis键过期事件配置完成。

    spring关于Redis文章地址:https://spring.io/guides/gs/messaging-redis/

  • 相关阅读:
    Tomcat启动成功,localhost:8080访问失败(Eclipse)
    maven本地导包到本地仓库
    【自习任我行】第二阶段项目计划与展望
    【自习任我行】任务跟踪6
    【自习任我行】任务跟踪5
    【自习任我行】任务跟踪4
    【自习任我行】任务跟踪3
    【自习任我行】任务跟踪2
    【自习任我行】任务跟踪1
    个人7天周计划
  • 原文地址:https://www.cnblogs.com/zhuzhen/p/10156122.html
Copyright © 2011-2022 走看看