Files
biz-api-cloud-zax/README_REDIS_TENANT.md
dzc 5a7f8dcfbb feat:增加老师额外的用户字段。
feat:增加了老师的导入,和导入的进度条。
feat:app分配次退款。
feat:上传人脸不需要审核。
feat:部门管理员导入用户不需要审核。
2026-08-12 19:57:53 +08:00

1.6 KiB
Raw Permalink Blame History

Redis 租户 Key 约定

通用异步任务的完整接入说明和实现位于 pjcloud-common/pjcloud-common-async-task。本文件记录整个后端工程都应遵循的 Redis 租户 Key 规则。

核心规则

项目 Redis 基础设施会根据当前租户上下文自动为 Redis Key 增加租户前缀。业务代码只负责定义业务命名空间和业务唯一标识,不得再次手工拼接 tenantId。

正确的业务 Key:

async:task:progress:user:import:teacher:{userId}:{taskId}

错误的业务 Key:

async:task:progress:user:import:teacher:{tenantId}:{userId}:{taskId}

错误示例会导致租户维度重复出现在最终 Redis Key 中,增加排查难度,并可能造成同一业务在不同调用方式下无法读取彼此写入的数据。

异步线程要求

“业务 Key 不拼接租户 ID”不代表异步线程不需要租户上下文。异步任务、定时任务等脱离 Web 请求线程执行的逻辑,在访问 Redis、数据库或其他租户资源前,仍必须按项目现有方式恢复 TenantContextHolder,并在任务结束后清理上下文。

租户上下文的职责是让基础设施自动完成租户隔离;业务 Key 的职责是描述具体业务。两者不得混用。

开发检查

  • 新增 Redis Key 时只包含业务命名空间及必要的业务唯一标识。
  • 禁止使用 TenantContextHolder.getTenantId()、请求头中的租户 ID 或用户对象中的租户 ID 手工拼接 Redis Key。
  • 异步执行时确认租户上下文已恢复,并在 finally 中清理。
  • Redis Key 变更前检查现有读写双方,避免造成历史缓存无法读取。