通常我们做过支付交易等软件开发时,通常为了防止财务上面的差错,会对账来发现是否存在账务问题,通常是把我们平台的数据与第三方(如支付宝的交易流水)进行对比找出差异的地方。
对账的演化:
阶段一:
人工对账,效率慢,可能还容易出错
阶段二:
软件系统对账,遍历自己平台的数据和第三方平台的数据进行对比,效率还是不高,不易扩展。
方法三:
用Redis的Set类型的差集功能得出差异数据,适用分布式系统中,C#代码的demo如下:
[HttpGet]
[Route("ReconciliationRedis")]
public bool ReconciliationRedis()
{
var redisDataKeyA = $"Reconciliation:A";
var redisDataKeyB = $"Reconciliation:B";
var csredis = new CSRedisClient("localhost");//链接Redis地址,这里默认本地地址
RedisHelper.Initialization(csredis);
if (RedisHelper.Exists(redisDataKeyA))
RedisHelper.Del(redisDataKeyA);
if (RedisHelper.Exists(redisDataKeyB))
RedisHelper.Del(redisDataKeyB);
//造数据集合A
for(int i = 0; i < 5; i++)
{
RedisHelper.SAdd(redisDataKeyA, i);
}
//造数据集合B
for (int i = 2; i < 7; i++)
{
RedisHelper.SAdd(redisDataKeyB, i);
}
//找出存在于数据集A,却不存在数据集合B的数据
var diffListA = RedisHelper.SDiff(redisDataKeyA, redisDataKeyB);
//找出存在于数据集B,却不存在数据集合A的数据
var diffListB = RedisHelper.SDiff(redisDataKeyB, redisDataKeyA);
return true;
}
阶段四:
可以引入MQ进行异步对账,起到解耦、异步的作用
更多分享请关注我的公众号