日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

redis实现对账(集合比较)功能

發布時間:2023/11/27 生活经验 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis实现对账(集合比较)功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現狀:每日在進行系統之間的訂單對賬時,往往是這樣的操作流程;?
1.從外部系統拉取數據存入本地數據庫;?
2.查詢本地訂單數據集合localSet;?
3.查詢外部系統訂單數據集合outerSet;?
4.以本地localSet為基準,對照outerSet,進行遍歷,將數據不一致(金額、狀態等),或者localSet存在而outerSet不存在的數據,放入新集合localDiffSet;?
5.以外部outerSet為基準,對照localSet,進行遍歷,將數據(金額、狀態等)不一致,或者outerSet存在而localSet不存在的數據,放入新集合outerDiffSet;?
6.將localDiffSet與outerDiffSet的數據,存入差異賬表?
問題:?
當比對數據無限多,數據全部在JVM中比對,對服務器的影響就比較大,執行效率也低下;

——redis解決方案

步驟一:外部系統數據拉取入庫?
步驟二:從數據庫查詢需要比對的數據,本地數據(localSet),外部系統數據(outerSet)

//---查詢訂單信息,組成字符串
SELECT CONCAT(order_no,','outer_order_no,',',trans_amount,',',status) FROM `order_info` where create_time BETWEEN '2015-12-01 00:00:00' and  '2015-12-31 23:59:59'; 

為什么組合成字符串,而不是object對象;因為我們屆時要比對的信息就是上述字段,如果字符串一致,那么就說明訂單信息一致,而不用再去一一比對對象的屬性;?
步驟三:將localSet與outerSet分別存入redis

//相關函數:redis.clients.jedis.JedisCluster.sadd(String key, String... member)
redisClusterUtils.sadd("{account}:localSet", "GM002215120800002,0.01,3","GM002215120800003,0.01,3");
redisClusterUtils.sadd("{account}:outerSet", "CZ001215120800010,0.01,3","CZ001215120800013,0.01,1");

注意點:這里的key,必須要用{}形式,來指定,使我們要比對的集合都處于同一slot,不然在稍后比對時會出現異常:

No way to dispatch this command to Redis Cluster because keys have different slots.

步驟四:進行2個集合的比對,得出交集union,將交集放入key”{account}:union”中

redisClusterUtils.sinterstore("{account}:union", "{account}:localSet", "{account}:outerSet");

步驟五:localSet和outerSet分別與交集進行比較,得出差集{account}:localDiff、{account}:outerDiff

redisClusterUtils.sdiffstore("{account}:localDiff", "{account}:localSet", "{account}:union");
redisClusterUtils.sdiffstore("{account}:outerDiff", "{account}:localSet", "{account}:union");

步驟六:將差集的數據存入數據庫差異賬表

//--獲取差集的每個成員
redisClusterUtils.smembers("{account}:localDiff");
redisClusterUtils.smembers("{account}:outerDiff");

?

關于redis集合(Set)操作的的相關命令,Redis集合命令相關資料

轉載:https://blog.csdn.net/qq_33144861/article/details/79467888

轉載于:https://www.cnblogs.com/duanxz/p/9203651.html

總結

以上是生活随笔為你收集整理的redis实现对账(集合比较)功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。