美文网首页redis
Spring实现redis键失效监听

Spring实现redis键失效监听

作者: fantasticMao | 来源:发表于2018-02-28 17:03 被阅读2261次

    1.修改redis配置文件

    修改配置文件redis.conf中的:notify-keyspace-events Ex,默认为notify-keyspace-events

    配置参数说明:

    # K    键空间通知,以__keyspace@<db>__为前缀 
    # E    键事件通知,以__keysevent@<db>__为前缀
    # g    del , expipre , rename 等类型无关的通用命令的通知, ...  
    # $    String命令  
    # l    List命令  
    # s    Set命令  
    # h    Hash命令  
    # z    有序集合命令  
    # x    过期事件(每次key过期时生成)  
    # e    驱逐事件(当key在内存满了被清除时生成)  
    # A    g$lshzxe的别名,因此”AKE”意味着所有的事件   
    

    修改好配置文件后,redis会对设置了expire的数据进行监听,当redis中的数据超时失效时,将会通知客户端.

    2.在spring-jedis的配置文件中添加监听配置

    <!--声明消息侦听器容器 -->
        <bean id="messageListener" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
            <constructor-arg>
                <bean class="cn.com.bonc.modules.monitor.redis.MyMessageDelegateImpl"/>
            </constructor-arg>
        </bean>
    
        <bean id="redisContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
            <property name="connectionFactory" ref="jedisConnectionFactory"/>
            <property name="messageListeners">
                <map>
                    <entry key-ref="messageListener">
                        <bean class="org.springframework.data.redis.listener.ChannelTopic">
                            <constructor-arg value="__keyevent@0__:expired"/>
                        </bean>
                    </entry>
                </map>
            </property>
        </bean>
    

    3.编写失效回调接口

    public interface MyMessageDelegate {
    
        void handleMessage(String message);
    
        void handleMessage(Map message);
    
        void handleMessage(byte[] message);
    
        void handleMessage(Serializable message);
    
        void handleMessage(Serializable message, String channel);
    }
    

    4.实现该接口并添加你的操作

    public class MyMessageDelegateImpl implements MyMessageDelegate {
    
        private static final Logger logger = LoggerFactory.getLogger(MyMessageDelegateImpl.class);
    
        @Autowired
        private RedisTemplate<String,Object> redisTemplate;
    
        @Override
        public void handleMessage(String message) {
        }
    
        @Override
        public void handleMessage(Map message) {
        }
    
        @Override
        public void handleMessage(byte[] message) {
        }
    
        @Override
        public void handleMessage(Serializable message) {
            logger.info("失效的键:",message);
            //TODO 拿到失效的键后做其他操作
        }
    
        @Override
        public void handleMessage(Serializable message, String channel) {
        }
    }
    

    相关文章

      网友评论

        本文标题:Spring实现redis键失效监听

        本文链接:https://www.haomeiwen.com/subject/irlixftx.html