【Redis】redis中的key失效后执行java方法

  • Post author:
  • Post category:java


redis的超时监听,只需修改配置文件redis.conf中的:

notify-keyspace-events


Ex

K    键空间通知,以__keyspace@<db>__为前缀  
E    键事件通知,以__keysevent@<db>__为前缀  
g    del , expipre , rename 等类型无关的通用命令的通知, ...  
$    String命令  
l    List命令  
s    Set命令  
h    Hash命令  
z    有序集合命令  
x    过期事件(每次key过期时生成)  
e    驱逐事件(当key在内存满了被清除时生成)  
A    g$lshzxe的别名,因此”AKE”意味着所有的事件  

新建一个配置类

@Configuration
public class RedisListenerConfig {

    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory){
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
}

再新建一个监听器

@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {

    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expKey = message.toString();
        String date = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        log.info("{}---该key(订单号):{} 失效了~", date, expKey);
        log.info("业务代码执行结束...");
    }
}

测试代码

    @RequestMapping(value = "/addOrder", method = RequestMethod.GET)
    public String addOrder(){
        String orderId = UUID.randomUUID().toString().replace("-", "");
        String date = new DateTime().toString("yyyy-MM-dd--HH:mm:ss");
        redisUtils.set(orderId, date, 10);
        return "在"+date+"下单成功,订单号:"+orderId;
    }

测试



版权声明:本文为niuchenliang524原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。