1. 配置类 ```java package org.springblade.modules.test;

    import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.listener.PatternTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer;

    /**

    • @author clown
    • @description
    • @date 2021年06月24日 16:17 */ @Configuration public class RedisConfig { @Bean RedisMessageListenerContainer container(RedisConnectionFactory factory) {
      1. RedisMessageListenerContainer container = new RedisMessageListenerContainer();
      2. container.setConnectionFactory(factory);
      3. container.addMessageListener(new RedisKeyExpirationListener(container), new PatternTopic("__keyevent@0__:expired"));
      4. return container;
      } }
    1. 2. 监听器
    2. ```java
    3. package org.springblade.modules.test;
    4. import lombok.extern.slf4j.Slf4j;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.data.redis.connection.Message;
    7. import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
    8. import org.springframework.data.redis.listener.RedisMessageListenerContainer;
    9. import org.springframework.stereotype.Component;
    10. /**
    11. * @author clown
    12. * @description
    13. * @date 2021年06月24日 16:18
    14. */
    15. @Component
    16. @Slf4j
    17. public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    18. public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
    19. super(listenerContainer);
    20. }
    21. /**
    22. * 针对 redis 数据失效事件,进行数据处理
    23. *
    24. * @param message
    25. * @param pattern
    26. */
    27. @Override
    28. public void onMessage(Message message, byte[] pattern) {
    29. // redis 客户端监听 Redis 16库 每个库对应不同的业务逻辑 前缀 order_timeOut_支付id
    30. String key = message.toString();
    31. log.info(">key:{}已经过期!<", key);
    32. // Long payId = Long.parseLong(key);
    33. // 过期,修改订单状态
    34. // payOrderTimeoutService.orderTimeout(payId);
    35. }
    36. }
    1. 测试接口 ```java package org.springblade.modules.test;

    import lombok.AllArgsConstructor; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;

    /**

    • @author clown
    • @description
    • @date 2021年06月24日 16:24 */ @RestController @AllArgsConstructor @RequestMapping(“/test”) public class TestController { private final StringRedisTemplate template;
    1. @PostMapping("/test")
    2. public Long test() {
    3. // 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。
    4. return template.getExpire("test");
    5. }

    }

    ```