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/

  • 相关阅读:
    《大话数据结构》第1章 数据结构绪论 1.2 你数据结构怎么学的?
    伍迷七八月新浪微博集锦
    《大话数据结构》第9章 排序 9.7 堆排序(下)
    《大话数据结构》第3章 线性表 3.8.2 单链表的删除
    《大话数据结构》第9章 排序 9.5 直接插入排序
    《大话数据结构》第9章 排序 9.8 归并排序(上)
    《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度
    《大话数据结构》第1章 数据结构绪论 1.1 开场白
    《大话数据结构》第9章 排序 9.1 开场白
    [AWS] Assign a public IP address to an EC2 instance after launched
  • 原文地址:https://www.cnblogs.com/zhuzhen/p/10156122.html
Copyright © 2011-2022 走看看