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