弹簧引导+复述,如何实现监听过期关键的方法

  

弹簧引导+复述,如何实现监听过期关键的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

前言:

在订单业务中,有时候需要对订单设置有效期,有效期到了后如果还未支付,就需要修改订单状态。对于这种业务的实现,有多种不同的办法,比如:

1,使用querytz,每次生成一个订单,就创建一个定时任务,到期后执行业务代码;

2, rabbitMq中的延迟队列;

3,对复述的关键进行监控;

, 1,引入依赖

 & lt; dependency>
  & lt; groupId> org.springframework.boot
  & lt; artifactId> spring-boot-starter-data-redis
  & lt;/dependency> 

2,修改启动的复述,配置

春:   #复述,   复述:   数据库:0   主持人:127.0.0.1   密码:redis_123456   端口:6379

3,在服务器中修改复述。参看配置文件(原来notify-keyspace-events属性是““;空的,我们只需要填上“前女友”就行了)

 notify-keyspace-events“Ex" 

4,创建一个复述,监控类,用于监控过期的关键,该类需继承KeyExpirationEventMessageListener

进口org.slf4j.Logger;   进口org.slf4j.LoggerFactory;   进口org.springframework.data.redis.connection.Message;   进口org.springframework.data.redis.listener.KeyExpirationEventMessageListener;   进口org.springframework.data.redis.listener.RedisMessageListenerContainer;      进口java.nio.charset.StandardCharsets;/* *   * @program: SpringCloud   * @description:复述,关键过期监听   * @author:张艺谋   * @create: 2020-03-24十四14   */公开课KeyExpiredListener延伸KeyExpirationEventMessageListener {      公共KeyExpiredListener (RedisMessageListenerContainer listenerContainer) {   超级(listenerContainer);   }      @Override   公共空间>进口com.zy.rabbitmq.base.Listener.KeyExpiredListener;   进口org.springframework.beans.factory.annotation.Autowired;   进口org.springframework.context.annotation.Bean;   进口org.springframework.context.annotation.Configuration;   进口org.springframework.data.redis.connection.RedisConnectionFactory;   进口org.springframework.data.redis.listener.RedisMessageListenerContainer;/* *   * @program: SpringCloud   * @description:复述,配置类   * @author:张艺谋   * @create: 2020-03-24真理   */@ configuration   公开课RedisConfiguration {      @ autowired   私人RedisConnectionFactory RedisConnectionFactory;      @ bean   公共RedisMessageListenerContainer RedisMessageListenerContainer () {   RedisMessageListenerContainer RedisMessageListenerContainer=new RedisMessageListenerContainer ();   redisMessageListenerContainer.setConnectionFactory (redisConnectionFactory);   返回redisMessageListenerContainer;   }      @ bean   公共KeyExpiredListener KeyExpiredListener () {   返回新KeyExpiredListener (this.redisMessageListenerContainer ());   }      }

6,这里提供一个复述,工具类,用于存储值,获取值,获取过期时间等操作。

进口org.springframework.data.redis.core.RedisTemplate;
  进口org.springframework.stereotype.Component;
  进口org.springframework.util.CollectionUtils;
  
  进口javax.annotation.Resource;
  进口java.util.concurrent.TimeUnit;/* *
  *复述,工具类
  * @Author ZhangYi
  */@ component
  公开课RedisUtil {
  
  @
  私人RedisTemplate<字符串,Object>redisTemplate;/* *
  *指定缓存失效时间
  *
  * @param键键
  * @param时间时间(秒)
  * @return
  */公共布尔到期(字符串键,长时间){
  尝试{
  如果时间比;0){
  redisTemplate。(到期时间,关键TimeUnit.SECONDS);
  }
  返回true;
  }捕捉(异常e) {
  e.printStackTrace ();
  返回错误;
  }
  }/* *
  *根据关键获取过期时间
  *
  * @param键键不能为null
  * @return时间(秒)返回0代表为永久有效
  */公共长getExpire (String键){
  redisTemplate返回。getExpire(关键,TimeUnit.SECONDS);
  }/* *
  *判断键是否存在
  *
  * @param键键
  * @return真实存在假不存在
  */公共布尔hasKey (String键){
  尝试{
  返回redisTemplate.hasKey(关键);
  }捕捉(异常e) {
  e.printStackTrace ();
  返回错误;
  }
  }/* *
  *删除缓存
  *
  * @param关键可以传一个值或多个
  */@SuppressWarnings (“unchecked")
  公共空间德尔(字符串…键){
  如果(钥匙!=零,,关键。长度比;0){
  如果(关键。长度==1){
  redisTemplate.delete (key [0]);
  其他}{
  redisTemplate.delete (CollectionUtils.arrayToList(键));
  }
  }
  }//============================字符串=============================/* *
  *普通缓存获取
  *
  * @param键键
  * @return值
  */公共对象(字符串键){
  返回键==null, # 63;空:redisTemplate.opsForValue () . get(关键);
  }/* *
  *普通缓存放入
  *
  * @param键键
  * @param值值
  * @return真正成功假失败
  */公共布尔组(字符串键,对象值){
  尝试{
  redisTemplate.opsForValue()。集(关键字,值);
  返回true;
  }捕捉(异常e) {
  e.printStackTrace ();
  返回错误;
  }
  
  }/* *
  *普通缓存放入并设置时间
  *
  * @param键键
  * @param值值
  * @param时间时间(秒)时间要大于0如小果时间于等于0将设置无限期
  * @return真正成功假失败
  */公共布尔(字符串键,对象的价值,长时间){
  尝试{
  如果时间比;0){
  redisTemplate.opsForValue()。集(价值,关键时候,TimeUnit.SECONDS);
  其他}{
  集(关键字,值);
  }
  返回true;
  }捕捉(异常e) {
  e.printStackTrace ();
  返回错误;
  }
  }
  }

弹簧引导+复述,如何实现监听过期关键的方法