datai/docs/requirements/2026-01-21-003-04-salesforce-cache-optimization.md

16 KiB
Raw Blame History

Salesforce 缓存优化需求

元数据

  • 需求编号2026-01-21-003-04
  • 父需求编号2026-01-21-003
  • 创建时间2026-01-21
  • 创建人SSOT 架构师
  • 状态:待开始
  • 优先级:高

需求概述

登录成功后将 SF 登录信息保存到 Redis 缓存,使用时校验有效性。缓存 Session IDAccess Token、Server URLInstance URL、用户信息、组织信息、Access Token 和过期时间戳。设置合理的缓存过期时间2 小时使用缓存时校验有效性检查过期时间戳缓存失效时自动重新登录。Session ID 的有效期通过成功登录后存入缓存中设置过期时间若是过期了Redis 则没有 Session ID。在缓存中存储过期时间戳使用前进行校验。并发登录使用 Salesforce 用户 ID + 系统 ID 存储缓存。设计结构化的缓存键:sf:auth:{userId}:{systemId}:{orgType}。Salesforce 登录成功后,刷新当前系统中对于 org 配置名称加 org 类型的缓存。过期时 Redis 自动清理,或者登出接口清除当前缓存。

目标

  1. 缓存登录信息:登录成功后将 SF 登录信息保存到 Redis 缓存
  2. 缓存有效性校验:使用时校验有效性(检查过期时间戳)
  3. 缓存失效处理:缓存失效时自动重新登录
  4. 结构化缓存键:设计结构化的缓存键:CURRENT_SOURCE_ORG_RESULT(源 orgCURRENT_TARGET_ORG_RESULT(目标 org
  5. 并发登录支持:并发登录使用不同的缓存键区分源 org 和目标 org
  6. 缓存刷新Salesforce 登录成功后,刷新当前系统中对于 org 配置名称加 org 类型的缓存
  7. 缓存清理:过期时 Redis 自动清理,或者登出接口清除当前缓存
  8. 会话管理:使用数据库表 datai_sf_login_session 管理会话信息
  9. 自动重新登录:会话失效时自动重新登录
  10. 会话状态管理支持会话状态active/inactive和最后活动时间管理

业务上下文

当前问题

  • 缺乏登录信息缓存机制
  • 缺乏缓存有效性校验
  • 缺乏缓存刷新机制
  • 缺乏缓存清理机制

业务场景

Salesforce 缓存优化
├─ 缓存 Session IDAccess Token
├─ 缓存 Server URLInstance URL
├─ 缓存用户信息
├─ 缓存组织信息
├─ 使用时校验有效性
├─ 登录成功后刷新 org 配置名称加 org 类型的缓存
├─ 过期时 Redis 自动清理,或者登出接口清除当前缓存
├─ 使用数据库表 datai_sf_login_session 管理会话信息
├─ 支持会话状态active/inactive和最后活动时间管理
└─ 会话失效时自动重新登录

应用场景

  1. 性能优化:使用 Redis 缓存减少重复登录,使用时校验有效性
  2. 并发登录:支持多个用户同时登录不同的 Salesforce 系统
  3. 缓存管理:自动管理缓存的生命周期

功能需求

核心功能

功能 1缓存登录信息

  • 描述:登录成功后将 SF 登录信息保存到 Redis 缓存
  • 验收标准
    1. 缓存 Session IDAccess Token
    2. 缓存 Server URLInstance URL
    3. 缓存用户信息
    4. 缓存组织信息
    5. 缓存 Access Token 和过期时间戳
    6. 设置合理的缓存过期时间2 小时)
    7. Session ID 的有效期通过成功登录后存入缓存中,设置过期时间
    8. 若是过期了Redis 则没有 Session ID
    9. 在缓存中存储过期时间戳,使用前进行校验
    10. 并发登录使用不同的缓存键区分源 org 和目标 org
    11. 设计结构化的缓存键:CURRENT_SOURCE_ORG_RESULT(源 orgCURRENT_TARGET_ORG_RESULT(目标 org
  • 优先级:高
  • 依赖关系依赖策略模式登录功能2026-01-21-003-02

功能 2缓存有效性校验

  • 描述:使用缓存时校验有效性(检查过期时间戳)
  • 验收标准
    1. 使用缓存时校验有效性(检查过期时间戳)
    2. 有效则直接使用
    3. 无效则重新登录
    4. 缓存校验时间 < 5ms
    5. 检查会话信息是否为 null
    6. 检查登录状态是否为成功
    7. 检查 Session ID 是否为空
    8. 检查 Session 是否过期
  • 优先级:高
  • 依赖关系:依赖缓存登录信息功能

功能 3缓存失效处理

  • 描述:缓存失效时自动重新登录
  • 验收标准
    1. 缓存失效时自动重新登录
    2. 基于历史登录记录进行自动登录
    3. 自动登录失败时返回错误信息
    4. 记录会话状态日志(会话为 null、登录状态为失败、Session 已过期)
  • 优先级:高
  • 依赖关系依赖缓存有效性校验功能、登录历史功能2026-01-21-003-03

功能 4缓存刷新

  • 描述Salesforce 登录成功后,刷新当前系统中对于 org 配置名称加 org 类型的缓存
  • 验收标准
    1. 登录成功后自动刷新 org 配置名称加 org 类型的缓存
    2. 缓存刷新失败后的处理机制
    3. 缓存刷新的日志记录
  • 优先级:高
  • 依赖关系:依赖缓存登录信息功能

功能 5缓存清理

  • 描述:过期时 Redis 自动清理,或者登出接口清除当前缓存
  • 验收标准
    1. 过期时 Redis 自动清理缓存
    2. 提供登出接口清除当前缓存
    3. 缓存清理失败后的处理机制
    4. 缓存清理的日志记录
  • 优先级:高
  • 依赖关系:依赖缓存登录信息功能

功能 6会话管理

  • 描述:使用数据库表 datai_sf_login_session 管理会话信息
  • 验收标准
    1. 记录会话信息(用户名、登录类型、会话状态)
    2. 记录登录时间、过期时间、最后活动时间
    3. 记录登录 IP、设备信息、浏览器信息
    4. 记录会话 ID、Salesforce 用户 ID、Salesforce 组织 ID
    5. 记录实例 URL、ORG 类型
    6. 支持会话状态active/inactive
    7. 支持查询会话信息列表
    8. 支持查询会话信息详情
    9. 支持新增会话信息
    10. 支持修改会话信息
    11. 支持删除会话信息
    12. 支持批量删除会话信息
    13. 支持根据 Session ID 查询会话信息
    14. 支持查询最近一条活跃的会话信息
    15. 支持根据 ORG 类型查询最近一条活跃的会话信息
    16. 支持导出会话信息列表为 Excel 文件
  • 优先级:高
  • 依赖关系:依赖缓存登录信息功能

功能 7自动重新登录

  • 描述:会话失效时自动重新登录
  • 验收标准
    1. 会话失效时自动重新登录
    2. 基于历史登录记录进行自动登录
    3. 自动登录失败时返回错误信息
    4. 自动登录成功后更新缓存
    5. 自动登录失败时抛出异常
    6. 记录自动登录的日志
  • 优先级:高
  • 依赖关系依赖会话管理功能、登录历史功能2026-01-21-003-03

非功能需求

性能需求

  • 缓存时间:缓存读取时间 < 10ms
  • 缓存校验时间:缓存有效性校验时间 < 5ms
  • 并发用户数:支持 100+ 并发用户

安全需求

  • 数据安全:缓存中的敏感信息使用加密存储

可用性需求

  • 系统可用性99.9%
  • 容错机制:缓存失效时自动重新登录

可维护性需求

  • 代码可读性:代码符合项目编码规范,注释完整
  • 测试覆盖率:单元测试覆盖率 ≥ 80%

数据需求

数据模型

datai_sf_login_sessionSalesforce 登录会话表)

datai_sf_login_session (Salesforce 登录会话表)
├─ id (BIGINT) - 主键ID
├─ username (VARCHAR) - 用户名
├─ login_type (VARCHAR) - 登录类型oauth2/session_id/cli/legacy_credential
├─ status (VARCHAR) - 会话状态active/inactive
├─ login_time (DATETIME) - 登录时间
├─ expire_time (DATETIME) - 过期时间
├─ last_activity_time (DATETIME) - 最后活动时间
├─ login_ip (VARCHAR) - 登录 IP
├─ device_info (VARCHAR) - 设备信息
├─ browser_info (VARCHAR) - 浏览器信息
├─ session_id (VARCHAR) - 会话 ID
├─ dept_id (BIGINT) - 部门 ID
├─ sf_user_id (VARCHAR) - Salesforce 用户 ID
├─ sf_organization_id (VARCHAR) - Salesforce 组织 ID
├─ instance_url (VARCHAR) - 实例 URLInstance URL
├─ org_type (VARCHAR) - ORG 类型S=源 org T=目标 org ST=源和目标 org
├─ create_by (VARCHAR) - 创建者
├─ create_time (DATETIME) - 创建时间
├─ update_by (VARCHAR) - 更新者
└─ update_time (DATETIME) - 更新时间

Redis 缓存结构

缓存键:
- 源 orgCURRENT_SOURCE_ORG_RESULT
- 目标 orgCURRENT_TARGET_ORG_RESULT

说明:
- 缓存键通过 orgTypesource/target动态获取
- 源 org 和目标 org 使用不同的缓存键
- 支持同时管理源 org 和目标 org 的会话

缓存值SalesforceLoginResult 对象JSON 序列化):
{
  "success": true/false,
  "errorCode": "错误代码",
  "errorMessage": "错误信息",
  "sessionId": "Session ID",
  "refreshToken": "刷新令牌(仅 OAuth 流程中存在)",
  "tokenType": "Bearer",
  "expiresIn": "过期时间(秒)",
  "loginTimestamp": "登录时间戳",
  "expirationTimestamp": "过期时间戳(登录时间 + 过期时长)",
  "instanceUrl": "实例 URLInstance URL",
  "metadataServerUrl": "元数据服务器 URL",
  "sandbox": true/false,
  "passwordExpired": true/false,
  "userId": "用户 ID由 Salesforce 登录后返回)",
  "organizationId": "组织 ID由 Salesforce 登录后返回)",
  "orgType": "组织类型source/target",
  "userFullName": "用户全名",
  "userEmail": "用户邮箱",
  "organizationName": "组织名称(由 Salesforce 登录后返回)",
  "language": "语言",
  "timeZone": "时区"
}

缓存过期时间2 小时7200 秒)

数据存储需求

  • 缓存类型Redis
  • 存储容量:支持 1000 万+ 缓存键
  • 缓存过期策略TTLTime To Live自动过期

数据流转需求

缓存登录信息
  └─ 登录成功后保存登录信息到 Redis 缓存
  └─ 缓存 Session ID
  └─ 缓存 Server URLInstance URL
  └─ 缓存用户信息、组织信息(由 Salesforce 登录后返回)
  └─ 缓存 Access Token 和过期时间戳
  └─ 设置缓存过期时间为 2 小时
  └─ 使用缓存键CURRENT_SOURCE_ORG_RESULT源 org、CURRENT_TARGET_ORG_RESULT目标 org
  └─ 源 org 和目标 org 使用不同的缓存键

使用缓存
  └─ 从 Redis 读取登录信息
  └─ 校验缓存有效性(检查过期时间)
  └─ 有效则直接使用
  └─ 无效则重新登录

缓存刷新
  └─ 登录成功后自动刷新 org 配置名称加 org 类型的缓存

缓存清理
  └─ 过期时 Redis 自动清理缓存
  └─ 或者通过登出接口清除当前缓存

会话管理
  └─ 使用数据库表 datai_sf_login_session 管理会话信息
  └─ 记录会话信息(用户名、登录类型、会话状态)
  └─ 记录登录时间、过期时间、最后活动时间
  └─ 记录登录 IP、设备信息、浏览器信息
  └─ 记录会话 ID、Salesforce 用户 ID、Salesforce 组织 ID
  └─ 记录实例 URL、ORG 类型
  └─ 支持会话状态active/inactive

自动重新登录
  └─ 会话失效时自动重新登录
  └─ 基于历史登录记录进行自动登录
  └─ 自动登录成功后更新缓存
  └─ 自动登录失败时抛出异常
  └─ 记录自动登录的日志

业务规则

  1. 缓存策略:登录信息必须缓存到 Redis设置过期时间为 2 小时
  2. 缓存有效性校验:使用缓存时必须校验有效性(检查 expirationTimestamp
  3. Session ID 有效期通过成功登录后存入缓存中设置过期时间若是过期了Redis 则没有 Session ID
  4. 缓存过期时间戳:在缓存中存储过期时间戳,使用前进行校验
  5. 并发登录缓存键:并发登录使用不同的缓存键区分源 org 和目标 org
  6. 结构化缓存键:缓存键格式为 CURRENT_SOURCE_ORG_RESULT(源 orgCURRENT_TARGET_ORG_RESULT(目标 org
  7. 缓存刷新Salesforce 登录成功后,刷新当前系统中对于 org 配置名称加 org 类型的缓存
  8. 缓存清理:过期时 Redis 自动清理,或者登出接口清除当前缓存
  9. 会话管理:使用数据库表 datai_sf_login_session 管理会话信息
  10. 会话状态支持会话状态active/inactive和最后活动时间管理
  11. 会话有效性检查:检查会话信息是否为 null、登录状态是否为成功、Session ID 是否为空、Session 是否过期
  12. 自动重新登录:会话失效时自动重新登录,基于历史登录记录进行自动登录
  13. 自动登录失败处理:自动登录失败时返回错误信息并抛出异常
  14. 会话状态日志:记录会话状态日志(会话为 null、登录状态为失败、Session 已过期)

接口需求

缓存管理接口

  1. 获取缓存信息

    • 接口路径GET /api/salesforce/cache/info
    • 请求参数userId、systemId、orgType
    • 响应:缓存信息
  2. 清除缓存

    • 接口路径DELETE /api/salesforce/cache
    • 请求参数userId、systemId、orgType
    • 响应:成功/失败
  3. 刷新缓存

    • 接口路径POST /api/salesforce/cache/refresh
    • 请求参数systemId、orgType
    • 响应:成功/失败

会话管理接口

  1. 查询会话信息列表

    • 接口路径GET /api/salesforce/session/list
    • 请求参数:分页参数、筛选参数
    • 响应:会话信息列表
  2. 导出会话信息列表

    • 接口路径POST /api/salesforce/session/export
    • 请求参数:筛选参数
    • 响应Excel 文件
  3. 查询会话信息详情

    • 接口路径GET /api/salesforce/session/{id}
    • 响应:会话信息详情
  4. 新增会话信息

    • 接口路径POST /api/salesforce/session
    • 请求参数:会话信息
    • 响应:成功/失败
  5. 修改会话信息

    • 接口路径PUT /api/salesforce/session
    • 请求参数:会话信息
    • 响应:成功/失败
  6. 删除会话信息

    • 接口路径DELETE /api/salesforce/session/{ids}
    • 请求参数:会话 ID 数组
    • 响应:成功/失败
  7. 根据 Session ID 查询会话信息

    • 接口路径GET /api/salesforce/session/by-session-id/{sessionId}
    • 响应:会话信息
  8. 查询最近一条活跃的会话信息

    • 接口路径GET /api/salesforce/session/latest-active
    • 响应:会话信息
  9. 根据 ORG 类型查询最近一条活跃的会话信息

    • 接口路径GET /api/salesforce/session/latest-active/{orgType}
    • 请求参数orgTypeS/T/ST
    • 响应:会话信息

SessionManager 接口

  1. 获取当前登录结果

    • 接口路径GET /api/salesforce/session/current-login-result/{orgType}
    • 请求参数orgTypesource/target
    • 响应SalesforceLoginResult 会话信息
  2. 获取当前 Session ID

    • 接口路径GET /api/salesforce/session/current-session/{orgType}
    • 请求参数orgTypesource/target
    • 响应:访问令牌
  3. 获取实例 URL

    • 接口路径GET /api/salesforce/session/instance-url/{orgType}
    • 请求参数orgTypesource/target
    • 响应:实例 URL
  4. 检查会话有效性

    • 接口路径GET /api/salesforce/session/is-valid/{orgType}
    • 请求参数orgTypesource/target
    • 响应会话是否有效true/false

依赖关系

  • 依赖 2026-01-21-003-02:策略模式登录
  • 依赖 2026-01-21-003-03:登录历史
  • 依赖 datai-cache-redis 模块
  • 依赖 datai-salesforce-common 模块的 Salesforce API 封装

后续需求

  • 2026-01-21-003-05会话管理
  • 2026-01-21-003-06登录状态查询
  • 2026-01-21-003-07错误码映射