ZSET在訂單支付與統計中的應用

2021-09-08 17:49:44 字數 1068 閱讀 2598

在購買高鐵票時,使用者下單會有乙個30min內支付都有效的情景,如果超過30min未支付或主動取消,會釋放佔座資訊

解決方案:使用zset儲存下單資訊,訂單號作為key,下單unix時間戳作為score

1 可以方便獲取訂單下單時間,計算還剩多少有效支付時間

2 使用者在30min內支付或主動取消訂單,可以快速移除訂單

3 釋放佔座定時任務,只需獲取zset中的第一條記錄,即最早時間下單資料,如果該記錄未超時支付,剩下的訂單必然未超時

在支付業務中需要統計某一渠道在一段時間內的支付成功率和支付耗時,便於監測支付渠道是否出現異常,及時做應對策略

解決方案:使用zset儲存下單資訊,訂單號作為key,unix時間戳作為score

實現步驟(這裡設定乙個渠道只嘗試支付一次,不考慮重試支付的情況):

1 記錄資料:使用兩個zset記錄資料,a記錄訂單申請支付時間,b記錄訂單支付成功時間(由於會有支付失敗的情況,a中的訂單,可能不會出現在b中)。使用到的命令zadd

2 篩選資料:篩選出一段時間內,a和b中的訂單集合a和b。具體篩選策略是,找到要查詢時間區間(score值)(x,y)的鄰近區間(x-1,y+1),將x-1和y+1插入a中,根據score取出中間的資料,即要找的資料(最後需要從訂單集合中移除x-1和y+1,避免對訂單資料有汙染)。使用到的命令zadd,zrangebyscore,zrem

3 處理邊界資料:由於支付耗時,同一訂單b中的score必然大於a中的,存在時間延遲,所以需要處理這部分訂單資料。分兩種情況處理:a有的而b沒有的(時間片段結尾嘗試支付的訂單),需要嘗試從b中get,並放入b;b有的而a沒有的(時間片段開始前嘗試支付的訂單),需要從b中移除。使用到的命令zscore,zadd,zrem,,zinterstore,zrank,zremrangebyrank

4 訂單計數統計支付成功率。使用到的命令zcard

5 找出a和b的交集,即求出成功支付的訂單,計算訂單耗時(這裡需要注意求交集/並集時使用sum策略的權重)。使用到的命令zinterstore,zunionstore

對Orders訂單表中的常見統計查詢

對orders訂單表中的常見統計查詢 該錶包含的的資訊 訂單編號,顧客編號,備註等 1 查詢order表中的所有訂單的總數 select count from orders 返回結果可能是 15問題 可讀性太差 思路 新增說明 方法 給查詢結果新增乙個列名 select count as order...

omnipeeker在wifi分析中的應用

記得大學學習tcp ip協議時,tcpdump給了很多幫助,最近需要好好了解一下802.11x mac層,在業內高手的推薦下發現了omnipeeker這一利器。下面和初學者分享一下這個軟體的使用。從無線特性看,電磁波的發射方是沒法限制接收方的,只要在覆蓋範圍內,任何人都可以用相關裝置收到訊號,也可以...

zookeeper在storm集群中的應用

1.心跳檢測,儲存supervisor和worker的心跳 包括它們的狀態 使得nimbus可以監控整個集群的狀態,從而重啟一些掛掉的worker 2.提交任務 3.儲存整個集群的所有狀態資訊,供ui顯示 4.storm在zk上的儲存結構 storm在zookeeper上的根目錄 預設為 storm...