SpringBoot 监听Redis key过期回调
场景
Spring boot
实现监听Redis key
失效事件可应对某些场景例如:处理订单过期自动取消、用户会员到期…
- Linux操作系统
- 修改redis安装目录下的redis.conf配置文件,然后找到notify-keyspace-events Ex这行代码,默认是注释掉的,取消注释即可(即删除掉前面的#)。
- 也有一种情况是没有这一行的,这种情况下直接把这一行添加上去即可。
- 然后重启redis。
- Windows操作系统
- 在安装目录下找到redis.windows.conf和redis.windows-service.conf两个文件,然后分别修改这两个文件中的notify-keyspace-events Ex字段,取消注释即可。
- 然后重启redis,Windows重启命令为redis-server.exe --service-start。
- 添加Redis键过期监听配置
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;
/**
* Description: redis 回调监听配置类
* 1。需要打开redis.conf配置类,打开回调监听配置 #开启key 过期回调监听 notify-keyspace-events Ex
* 2。编写回调监听配置类RedisListenerConfig
* 3。重写失效回调方法 RedisKeyExpirationListerner
**/
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory factory){
RedisMessageListenerContainer container=new RedisMessageListenerContainer();
container.setConnectionFactory(factory);
return container;
}
}
- 创建监听类
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 KeyExpiredListener extends KeyExpirationEventMessageListener {
public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 使用该方法监听,当Redis的key失效的时候执行该方法
*/
@Override
public void onMessage(Message message, byte[] pattern) {
// 过期的Key
String expiraKey = message.toString();
System.out.println("该Key已失效:"+expiraKey);
}
}
3.指定Redis
的 key
设置值及其过期时间
Redis Setex
命令为指定的 key
设置值及其过期时间。如果 key
已经存在, SETEX
命令将会替换旧的值。