gpt4 book ai didi

redis - spring data redis - 监听过期事件

转载 作者:IT王子 更新时间:2023-10-29 05:59:11 25 4
gpt4 key购买 nike

我想用 KeyExpirationEventMessageListener 监听过期事件,但找不到示例。

有人知道如何使用 Spring boot 1.4.3 和 Spring Data Redis 做到这一点吗?

我正在做这个

    JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
this.jedis = pool.getResource();
this.jedis.psubscribe(new JedisPubSub() {
@Override
public void onPMessage(String pattern, String channel, String message) {
System.out.println("onPMessage pattern " + pattern + " " + channel + " " + message);
List<Object> txResults = redisTemplate.execute(new SessionCallback<List<Object>>() {
public List<Object> execute(RedisOperations operations) throws DataAccessException {
operations.multi();
operations.opsForValue().get("val:" + message);
operations.delete("val:" + message);
return operations.exec();
}
});
System.out.println(txResults.get(0));
}
}, "__keyevent@0__:expired");

而且我想直接使用 Spring 而不是 Jedis。

问候

最佳答案

不要使用 KeyExpirationEventMessageListener,因为它会触发 RedisKeyExpiredEvent,然后导致 RedisKeyValueAdapter.onApplicationEvent 失败。

而是使用 RedisMessageListenerContainer:

@Bean
RedisMessageListenerContainer keyExpirationListenerContainer(RedisConnectionFactory connectionFactory) {

RedisMessageListenerContainer listenerContainer = new RedisMessageListenerContainer();
listenerContainer.setConnectionFactory(connectionFactory);

listenerContainer.addMessageListener((message, pattern) -> {

// event handling comes here

}, new PatternTopic("__keyevent@*__:expired"));

return listenerContainer;
}

RedisMessageListenerContainer 在自己的线程上运行所有通知。

关于redis - spring data redis - 监听过期事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41506606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com