Redis自增ID线上线下环境不同步,导致请求数据不一致问题

项目场景:

程序去请求API接口,每次调用请求都需要携带唯一的请求ID(相当于msgID),然后使用了Redis的自增ID生成唯一ID


问题描述

唯一ID用的是Redis的自增ID(0,1,2,3........);

线上的Redis自增ID跟线下测试的Redis自增ID不同步,导致线上线下请求数据结果不一致




原因分析:

线下测试的时候已经用了(0,1....,20)1到20的ID分别去请求申请过了那个API,然后再根据ID去查询到的数据都是正常的;这时候部署到线上服务器去,但线上服务器的Redis的自增ID这时候是从0开始的,所以拿0去请求API而ID为0已经在线下请求过API了,然后再拿0去请求API查询数据时,查询到的是下线测试那0去请求的数据,而不是当前线上想要的一个数据,然后就存到Redis,前端查询Redis的数据时数据就是错误的了;


解决方案:

其实这个唯一ID也可以使用时间戳来解决(会有时间回拨的问题),但本文主要讲的是Redis自增ID不涉及时间戳。

我使用的解决方法是去请求API时根据响应的值判断当前请求的ID是否已经请求过,如果请求过了则ch重新从Redis获取新的ID再循环请求,自动请求成功(可以限制循环次数)

api请求:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值