SpringBoot监听Redis的Key过期事件 短命女 2022-09-08 05:55 167阅读 0赞 ### Redis的配置 ### * 修改`conf`文件 * `notify-keyspace-events "Ex"` * 该配置表示监听key的过期事件,默认未开启 * 该配置的其他信息(可以监听N多事件),可以参阅配置文件的注释,非常详细 该监听器会在`key`过期时候触发 package com.reemoon.boot.redisListenerConfig; import java.nio.charset.StandardCharsets; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; import org.springframework.data.redis.listener.RedisMessageListenerContainer; /** * @author * @create 2021-08-25 16:30 */ public class KeyExpiredListener extends KeyExpirationEventMessageListener { private static final Logger LOGGER = LoggerFactory.getLogger(KeyExpiredListener.class); @Autowired private RedisTemplate redisTemplate; public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Override public void onMessage(Message message, byte[] pattern) { String channel = new String(message.getChannel(),StandardCharsets.UTF_8); //过期的key String key = new String(message.getBody(),StandardCharsets.UTF_8); LOGGER.info("redis key 过期:pattern={},channel={},key={}",new String(pattern),channel,key); } } package com.reemoon.boot.redisListenerConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.listener.RedisMessageListenerContainer; /** * @author * @create 2021-08-25 16:25 */ @Configuration public class RedisConfiguration { @Autowired private RedisConnectionFactory redisConnectionFactory; @Bean public RedisMessageListenerContainer redisMessageListenerContainer() { RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer(); redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory); return redisMessageListenerContainer; } @Bean public KeyExpiredListener keyExpiredListener() { return new KeyExpiredListener(this.redisMessageListenerContainer()); } } ### 往Redis写入一个key,并且设置过期时间,过期事件被触发 ### ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_Q1NETiBAamF0dHhndA_size_14_color_FFFFFF_t_70_g_se_x_16][] ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_Q1NETiBAamF0dHhndA_size_64_color_FFFFFF_t_70_g_se_x_16][] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_Q1NETiBAamF0dHhndA_size_14_color_FFFFFF_t_70_g_se_x_16]: /images/20220829/de2e9305962445608ec168e8e8369b6e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_Q1NETiBAamF0dHhndA_size_64_color_FFFFFF_t_70_g_se_x_16]: /images/20220829/0656d199e7cf4611a8e49cbc1eaf4136.png
还没有评论,来说两句吧...