Redis过期监听——订单超时-取消
1.配置redis运行:
#命令:
docker run -p 6378:6379 --name redis -v C:/Users/JX/redis/conf/redis.conf:/etc/redis/redis.conf -v C:/Users/JX/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
#解释:-v数据挂载,win10下的C:/Users/JX/redis/conf/redis.conf文件与redis容器中的/etc/redis/redis.conf关联
# -d后台启动
# --appendonly yes 数据持久
# redis-server /etc/redis/redis.conf指定配置文件启动
redis.conf 从官网下载: http://download.redis.io/redis-stable/redis.conf
redis.conf配置讲解参考如下:https://mp.csdn.net/console/editor/html/112244632
2.配置redis.conf
注释 # bind 127.0.0.1 -::1
protected-mode no #关闭保护模式 此时外部网络可以直接访问,yes为开启,需配置bind ip或者设置访问密码
notify-keyspace-events Ex #开启过期事件
3.导入Redis依赖
<!--redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--WEB依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
4.配置文件
spring:
redis:
port: 6378
5.创建配置类
RedisListenerConfig(配置RedisMessageListenerContainer这个Bean)
//备注:redis监听配置
@Configuration
public class RedisListenerConfig {
@Autowired
private RedisTemplate redisTemplate;
//处理乱码
@Bean
public RedisTemplate redisTemplateInit() {
// key序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
//val实例化
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
//监听
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
6.继承KeyExpirationEventMessageListener创建redis过期事件的监听类
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 针对redis数据失效事件,进行数据处理
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
try {
String key = message.toString();
System.out.println(key);
} catch (Exception e) {
System.out.println("错误异常");
e.printStackTrace();
}
}
}