目录

工欲善其事

实践出真知

活跃标签: linux java mysql 待分类 js springboot win10 电路 vue macOS nginx esp32 git docker windows idea maven esp8266 python Arduino

存档:

X

Spring boot实现监听Redis key失效事件

开启redis key过期提醒

修改redis相关事件配置。找到redis配置文件redis.conf,只需修改配置文件redis.conf中的:notify-keyspace-events** Ex**,默认为notify-keyspace-events "", 查看“notify-keyspace-events”的配置项,如果没有,添加“notify-keyspace-events Ex”,如果有值,添加Ex,重启redis。

相关参数如图:

K:keyspace事件,事件以__keyspace@<db>__为前缀进行发布;  
E:keyevent事件,事件以__keyevent@<db>__为前缀进行发布;  
g:一般性的,非特定类型的命令,比如del,expire,rename等;   
$:字符串特定命令;  
l:列表特定命令;  
s:集合特定命令;  
h:哈希特定命令;  
z:有序集合特定命令;  
x:过期事件,当某个键过期并删除时会产生该事件;  
e:驱逐事件,当某个键因maxmemore策略而被删除时,产生该事件;  
A:g$lshzxe的别名,因此”AKE”意味着所有事件。

SpringBoot中首先要集成redis并开启以上配置



@Log4j2
@Component
public class RedisMessageListener extends KeyExpirationEventMessageListener {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Autowired
    private HIChildCourseContentService hiChildCourseContentService;

    @Value("${spring.redis.database}")
    private String database;

    public RedisMessageListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    @Override
    protected void doRegister(RedisMessageListenerContainer listenerContainer) {
        // 配置监听哪个频道,频道可以是多,多个传list
        listenerContainer.addMessageListener(this, new PatternTopic("__keyevent@" + database + "__:expired"));
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        log.info("收到 redis 过期异步通知:{}", message.toString());
  
    }  
}

标题:Spring boot实现监听Redis key失效事件
作者:llilei
地址:http://solo.llilei.work/articles/2021/09/17/1631837862575.html