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

本文详细介绍如何在Redis中配置并实现键过期事件监听,包括修改redis.conf配置、创建监听器类及测试代码,展示如何捕捉键过期事件并进行日志记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    }

测试

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值