feat: w06 类型推断增强辅助
All checks were successful
缓存序列化结构检查 / cache-schema-check (push) Has been skipped
All checks were successful
缓存序列化结构检查 / cache-schema-check (push) Has been skipped
This commit is contained in:
17
docs/实施方案.md
17
docs/实施方案.md
@@ -282,9 +282,8 @@ git diff --name-only {old-sha} {new-sha} -- '*.java'
|
||||
| W01 | `redisUtil.insert(key, JSON.toJSONString(expr), ttl)` | key 表达式、value 表达式 | ✅ |
|
||||
| W02 | `redisTemplate.opsForValue().set(key, JSON.toJSONString(expr), ...)` | 同上 | ✅ |
|
||||
| W03 | `stringRedisTemplate.opsForValue().set(key, JsonUtil.getObjectToString(expr), ...)` | 同上 | ✅ |
|
||||
| W04 | `redisTemplate.opsForValue().set(key, expr, ...)` 且 expr 非字面量 | 直写对象类型 | ✅|
|
||||
| W04 | `redisTemplate.opsForValue().set(key, expr, ...)` 且 expr 非字面量 | 直写对象类型 | ✅ |
|
||||
| W05 | `redisTemplate.opsForHash().put(key, field, expr)` | Hash 写出 value 类型 | ✅ |
|
||||
| W06 | `JSON.parseObject(cacheValue, Xxx.class)` | 辅助反向确认读取类型 | 未做 |
|
||||
|
||||
**忽略规则**(自动):
|
||||
|
||||
@@ -292,6 +291,19 @@ git diff --name-only {old-sha} {new-sha} -- '*.java'
|
||||
- 方法名含 `setIfAbsent`、`increment`、`delete`、`remove`、`expire` 等
|
||||
- key 匹配 `ignore.key_patterns` 配置(锁 / token / 登录计数等)
|
||||
|
||||
#### Step 4b:读侧类型辅助(W06,非写入模式)
|
||||
|
||||
W06 **不产生独立告警**,只扫描反序列化调用,用读到的 `Xxx.class` **补强**同文件(或同 key)写入点的 value 类型 / 根数组标记。
|
||||
|
||||
| 匹配示例 | 作用 |
|
||||
|----------|------|
|
||||
| `JSON.parseObject(raw, Xxx.class)` | 补强对象类型 |
|
||||
| `JSON.parseArray(raw, Xxx.class)` / `JsonUtil.getJsonToList` | 补强 `List<Xxx>`(rootArray) |
|
||||
| `JsonUtil.getJsonToBean(raw, Xxx.class)` | 同上 |
|
||||
| 可关联到 `redisUtil.getString(key)` / `opsForValue().get(key)` | 同时补强 key 模式 |
|
||||
|
||||
开关:`detection.read_hints_enabled`(默认 `true`)。优先级:`manual_mappings` > W06 补强 > 写侧 AST 推断。
|
||||
|
||||
#### Step 5:类型推断
|
||||
|
||||
对每个写入点的 `expr`,使用 JavaParser Symbol Solver 推断类型:
|
||||
@@ -512,6 +524,7 @@ notify:
|
||||
| 忽略规则完善 | 锁/计数器/token/字面量/setIfAbsent | ✅ |
|
||||
| 多模块性能 | 并行读文件、索引批量装载、`manual_mappings` | ✅ |
|
||||
| 企微高亮 | 删除橙 `warning` / 新增绿 `info`;位置+类型通用项 | ✅ |
|
||||
| W06 读侧辅助 | `parseObject`/`parseArray` 等补强写入 value 类型 | ✅ |
|
||||
|
||||
### Phase 3 — 运营
|
||||
|
||||
|
||||
21
docs/配置说明.md
21
docs/配置说明.md
@@ -43,6 +43,7 @@ include_modules:
|
||||
由 `redisCheck` 仓库维护,随 jar 发布,默认包含:
|
||||
|
||||
- `detection.patterns`:**W01~W05**(JSON 字符串写入 + Template 直写 + Hash)
|
||||
- `detection.read_hints_enabled`:W06 读侧反序列化类型辅助(默认 true)
|
||||
- `ignore.key_patterns`(锁 / 计数器 / token)
|
||||
- `detection.min_confidence`、`max_field_depth`
|
||||
- `mode: notify`、`enabled: true`
|
||||
@@ -106,6 +107,9 @@ detection:
|
||||
- W04 # redisTemplate 直写对象
|
||||
- W05 # opsForHash().put
|
||||
|
||||
# W06:读侧反序列化类型辅助(不产生独立告警)
|
||||
read_hints_enabled: true
|
||||
|
||||
# 类型推断最低置信度,低于此值标记为低置信度提示
|
||||
min_confidence: 0.6
|
||||
|
||||
@@ -211,6 +215,23 @@ detection:
|
||||
patterns: [W01, W02, W03]
|
||||
```
|
||||
|
||||
### 3.5.1 detection.read_hints_enabled(W06 辅助)
|
||||
|
||||
| 字段 | 类型 | 默认 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `read_hints_enabled` | boolean | true | 扫描 `parseObject` / `parseArray` / `getJsonToBean` 等,补强同文件或同 key 写入点的 value 类型 |
|
||||
|
||||
- **不是写入模式**:不会单独因为「多了一处 parse」而告警
|
||||
- 能关联到 `redis get(key)` 时,还可补强 unresolved key
|
||||
- 覆盖优先级:`manual_mappings` > W06 > 写侧 AST
|
||||
|
||||
关闭示例:
|
||||
|
||||
```yaml
|
||||
detection:
|
||||
read_hints_enabled: false
|
||||
```
|
||||
|
||||
### 3.6 manual_mappings
|
||||
|
||||
当自动推断不准确时使用。匹配优先级 **高于** 自动推断(按 `类全名#方法名` 覆盖 key 模式与 value 类型)。
|
||||
|
||||
Reference in New Issue
Block a user