项目场景:
程序去请求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请求: