美文网首页
spring boot + redis 过期事件

spring boot + redis 过期事件

作者: Lasipia | 来源:发表于2020-01-20 14:39 被阅读0次
  1. 修改redis.conf
# 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”意味着所有的事件

notify-keyspace-events Ex

2.添加RedisMessageListenerContainer 配置

@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    return container;
}

3.添加KeyExpirationEventMessageListener配置

@Bean
public KeyExpirationEventMessageListener keyExpirationEventMessageListener(RedisMessageListenerContainer container) {
    return new KeyExpirationEventMessageListener(container);
}

KeyExpirationEventMessageListener内部会自动的订阅 __keyevent@*__:expired 这个Topic

4.添加一个事件监听

@Component
@Slf4j
public class RedisKeyExpireListener implements ApplicationListener<RedisKeyExpiredEvent> {
    @Override
    public void onApplicationEvent(RedisKeyExpiredEvent event) {
        log.debug("{}:{}:{}:{}",event.getId(),event.getKeyspace(),event.getValue(),event.getChannel());
    }
}

使用spring来实现可以过期事件监听非常方便,只需要简单的几个Bean的配置就可以了,spring会把redis的过期事件转化为spring的应用事件,我们只需要配一个监听器来监听RedisKeyExpiredEvent事件就可以了

相关文章

网友评论

      本文标题:spring boot + redis 过期事件

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