spring boot + redis 过期事件

  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事件就可以了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我的应用场景:因为业务需求,我们会每10分钟从kafka得到数据开始处理,这时就会存在一种情况,如果kafka数据...
    szgl_lucifer阅读 7,407评论 0 3
  • 作者:黄湘龙 花了三天时间,把REDIS 3.0.6英文版大部分都翻译过来了,还有部分没翻译完,等我慢慢更新本文章...
    TopTools阅读 1,793评论 0 0
  • 需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 解决方案1: 可以利用redis天然的key...
    LI木水阅读 30,459评论 7 39
  • Spring Boot的方便体现在简化了很多繁琐的配置,对开发人员来说是一个福音,通过引入各种Spring Boo...
    小王学java阅读 231评论 0 1
  • 愿奏出一曲永不停止的乐章,勾起心中深处的记忆,奏破那记忆的封印。叹一句:莫散终为散!
    有病啊_8844阅读 108评论 0 0