SpringBoot使用Redis单机版过期键监听事件的实现示例
作者:师小师
在缓存的使用场景中经常需要使用到过期事件,本文主要介绍了SpringBoot使用Redis单机版过期键监听事件的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Redis单机版
SpringBoot版本:2.3.6.RELEASE
依赖
<!-- redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- commons-pool2连接池 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
application.yml 配置信息
spring: # redis 配置 redis: # 地址 host: localhost # 端口,默认为6379 port: 6379 # 数据库索引 database: 0 # 密码 password: # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms
redis配置文件
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * Redis序列化规则配置类 */ @Configuration public class RedisConfig { /** * 自定义序列化机制 * * @param connectionFactory * @return */ @Bean @SuppressWarnings(value = {"unchecked", "rawtypes"}) public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); template.setConnectionFactory(connectionFactory); // Json序列化配置 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // String 的序列化 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // key采用String的序列化方式 template.setKeySerializer(stringRedisSerializer); // hash的key也采用String的序列化方式 template.setHashKeySerializer(stringRedisSerializer); // value序列化方式采用jackson template.setValueSerializer(jackson2JsonRedisSerializer); // hash的value序列化方式采用jackson template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } // redis 监听事件 @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); return container; } }
redis监听配置信息
import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.connection.*; import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.stereotype.Component; @Component @Slf4j public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener { public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); log.info("过期事件,启动监听......"); } /** * Redis失效事件 key * * @param message * @param pattern */ @Override public void onMessage(Message message, byte[] pattern) { String expireKey = message.toString(); System.out.println("过期事件监听键:" + expireKey); // 获取订单编号 if (expireKey.startsWith("order:")) { // 截取订单编号 final String str = expireKey.substring(expireKey.lastIndexOf(":") + 1); System.out.println(str); System.out.println("转换后订单编号:" + Long.valueOf(str)); // TODO 业务处理逻辑 } } }
打开 redis 客户端添加 key:SETEX "order:20220824170501" 20 "20220824170501"
20秒后过期
查看控制台输出内容:
到此这篇关于SpringBoot使用Redis单机版过期键监听事件的实现示例的文章就介绍到这了,更多相关SpringBoot Redis过期键监听内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- springboot+redis过期事件监听实现过程解析
- Spring Boot监听Redis Key失效事件实现定时任务的示例
- spring boot+redis 监听过期Key的操作方法
- SpringBoot如何整合redis实现过期key监听事件
- SpringBoot如何监控Redis中某个Key的变化(自定义监听器)
- SpringBoot中使用Redis Stream实现消息监听示例
- SpringBoot如何监听redis Key变化事件案例详解
- springboot整合redis过期key监听实现订单过期的项目实践
- SpringBoot监听Redis key失效事件的实现代码
- 如何监听Redis中Key值的变化(SpringBoot整合)