Redis过期监听——订单超时-取消
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..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(); } } }