redis key失效监听

This commit is contained in:
2024-03-04 15:58:05 +08:00
parent ebe5c2123b
commit 1b1c69cfa4
9 changed files with 74 additions and 42 deletions

View File

@@ -21,6 +21,7 @@ import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
@@ -36,6 +37,8 @@ import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import reactor.util.annotation.Nullable;
@@ -57,6 +60,9 @@ import java.util.Map;
@EnableConfigurationProperties(RedisProperties.class)
public class RedisConfig extends CachingConfigurerSupport {
@Autowired
private RedisKeyExpirationListener redisKeyExpirationListener;
/**
* 设置 redis 数据默认过期时间默认2小时
* 设置@cacheable 序列化方式
@@ -83,16 +89,10 @@ public class RedisConfig extends CachingConfigurerSupport {
// fastjson 升级到 1.2.83 后需要指定序列化白名单
ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.pojo");
ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.service");
// 模块内的实体类
// ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.mnt.domain");
// ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.quartz.domain");
// ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.system.domain");
// 模块内的 Dto
ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.mnt");
ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.system");
ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.quartz");
ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.config");
// ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.system.service.dto");
// key的序列化采用StringRedisSerializer
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
@@ -100,6 +100,17 @@ public class RedisConfig extends CachingConfigurerSupport {
return template;
}
//redis key失效监听
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
System.out.println(111);
// 监听特定键的过期事件
container.addMessageListener(redisKeyExpirationListener, new PatternTopic("__keyevent@0__:expired"));
return container;
}
/**
* 自定义缓存key生成策略默认将使用该策略
*/

View File

@@ -0,0 +1,16 @@
package cn.ysk.cashier.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
@Configuration
public class RedisKeyExpirationListener implements MessageListener {
@Override
public void onMessage(Message message, byte[] pattern) {
String expiredKey = new String(message.getBody());
System.out.println("过期的Key为: " + expiredKey);
// 在这里添加处理键过期事件的逻辑
}
}