java redis过期回调_Java中 Redis到期事件通知(key过期,触发事件)

本文介绍了如何在Java中监听Redis的键过期事件。首先,在redis.conf配置文件中开启键空间通知,然后通过Spring Data Redis创建RedisMessageListenerContainer,并设置回调监听器。在监听器中,当键过期时,进行相应的业务处理,如更新用户状态。
摘要由CSDN通过智能技术生成

1.  在redis.conf 中修改  notify-keyspace-events Ex 这一行的注释打开

2.

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.RedisMessageListenerContainer;

@Configuration

public class RedisListenerConfig {

@Bean

RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {

RedisMessageListenerContainer container = new RedisMessageListenerContainer();

container.setConnectionFactory(connectionFactory);

//container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired"));

return container;

}

}

3.

import com.mayikt.api.service.user.EduTempMemberService;

import com.mayikt.api.service.user.UserService;

import com.mayikt.entity.user.EduTempMember;

import org.apache.commons.lang3.StringUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.connection.Message;

import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;

import org.springframework.data.redis.listener.RedisMessageListenerContainer;

import org.springframework.stereotype.Component;

@Component

public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {

@Autowired

private EduTempMemberService eduTempMemberService;

@Autowired

private UserService userService;

private final static Logger logger = LoggerFactory.getLogger(RedisKeyExpirationListener.class);

/* @Autowired

private RedisClient redisClient;*/

public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {

super(listenerContainer);

}

private final static String MAYIKT_REDIS_KEY="mayikt_member";

@Override

public void onMessage(Message message, byte[] pattern) {

// 用户做自己的业务处理即可,注意message.toString()可以获取失效的key

String expiredKey = message.toString();

Integer userId=null;

if(expiredKey.startsWith(MAYIKT_REDIS_KEY)){

//获取token 使用token 进行修改用户会员

if (!StringUtils.isBlank(expiredKey.substring(14))){

String token=expiredKey.substring(14);

EduTempMember eduTempMember = eduTempMemberService.queryEduTempMemberByToken(token);

System.out.println("eduTempMember--"+eduTempMember);

if (eduTempMember!=null){

userId=eduTempMember.getUserId();

userService.updateUserIsVip(userId);

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值