美團(tuán)面試官:訂單自動(dòng)關(guān)閉的功能該如何實(shí)現(xiàn)?我:有點(diǎn)懵~
來(lái)源:https://juejin.cn/post/6919095552835584008
# 業(yè)務(wù)場(chǎng)景
# 實(shí)現(xiàn)思路
# 開(kāi)啟 Redis key 過(guò)期提醒
K:keyspace 事件,事件以 keyspace@ 為前綴進(jìn)行發(fā)布
E:keyevent 事件,事件以 keyevent@ 為前綴進(jìn)行發(fā)布
g:一般性的,非特定類型的命令,比如del,expire,rename等
$:字符串特定命令
l:列表特定命令
s:集合特定命令
h:哈希特定命令
z:有序集合特定命令
x:過(guò)期事件,當(dāng)某個(gè)鍵過(guò)期并刪除時(shí)會(huì)產(chǎn)生該事件
e:驅(qū)逐事件,當(dāng)某個(gè)鍵因 maxmemore 策略而被刪除時(shí),產(chǎn)生該事件
A:g$lshzxe的別名,因此”AKE”意味著所有事件
# 引入依賴
<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-data-redisartifactId>dependency>
# 相關(guān)配置
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;public class RedisListenerConfig {RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);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;/*** 監(jiān)聽(tīng)所有db的過(guò)期事件__keyevent@*__:expired"*/public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {super(listenerContainer);}/*** 針對(duì) redis 數(shù)據(jù)失效事件,進(jìn)行數(shù)據(jù)處理* @param message* @param pattern*/public void onMessage(Message message, byte[] pattern) {// 獲取到失效的 key,進(jìn)行取消訂單業(yè)務(wù)處理String expiredKey = message.toString();System.out.println(expiredKey);}}
推薦閱讀:
華為正式宣布養(yǎng)豬,網(wǎng)友沸騰:支持華為自救!
API 面試四連殺:接口如何設(shè)計(jì)?安全如何保證?簽名如何實(shí)現(xiàn)?防重如何實(shí)現(xiàn)?
Spring Boot 中引入 MyBatisPlus 的常規(guī)流程
點(diǎn)擊卡片關(guān)注,查看更多精彩
點(diǎn)分享 點(diǎn)點(diǎn)贊 點(diǎn)在看
評(píng)論
圖片
表情



