
# 问题描述:
升级或重启redis后单据大面积出现编码重复。
# 排查步骤:
## 步骤一:判断Redis是否存在旧数据
### 1.获取生成重复编号的编码规则FID以及对应的依据
**1)获取编码规则FID方式**:在编码规则配置列表找到生成重复编号的编码规则,可以通过F12快捷键进入浏览器开发者工具,查找到选中这条数据产生的网络请求,复制编码规则的FID(如:2J247TR92I18)。

**2)获取对应依据方式**:进入编码规则详情页,根据编码段中【流水号依据】”设为依据“或”设为依据但不显示“对应的编码来源,在生成重复编号的单据中查找这些编码来源的字段值,每个字段值之间用”\_split_“分隔(如:19\_split\_1902\_split\_202301)。

### 2.根据编码规则FID+依据查找对应的编码规则发号信息
### 2.1 发号信息一:号段
进入开发平台,搜索表单ID生成器-号段(bos_signer_segment),进入该表单的列表,在【关键字】中使用编码规则FID+依据(如:2J247TR92I1819\_split\_1902\_split\_202301)过滤对应的号段数据。选中数据点击查看缓存,对比列表数据和发号缓存数据。
**判断redis缓存中存在旧数据方式**:
下图中,号段列表数据(后续简称列表)和发号缓存数据(后续简称缓存)对应关系为:
①缓存“当前号” > 列表("当前号" - "号段长度")。
②缓存“最大号限制” = 列表“当前号”。
③缓存“号段长度” = 列表“号段长度”。
④缓存“版本” = 列表“版本” - 1。
即列表上记录的是即将发出的下一个号段(如:2000-3000),对应缓存中的是当前号段(如:1000-2000)。
**如果①②④中缓存和列表数据对应关系都是小于时,可判断为缓存中是旧数据,如下图所示。**

### 2.2 发号信息二:消费号
进入开发平台,搜索表单ID生成器-消费号(bos_cr_signer_record),在【关键字】中使用编码规则FID+依据(如:2J247TR92I1819\_split\_1902\_split\_202301)过滤对应的消费号数据。
该表单中记录的是发号缓存中当前号段发出的流水号,每个流水号仅记录一次且只存在当前号段区间的流水号。