Skip to content

应用缓存 ​

概述 ​

ecshopx-java 使用 Redis 作为应用层缓存与辅助存储(会话、配置缓存、dispatch 队列、统计计数等)。通过多个逻辑库(database index)在同一 Redis 实例上划分业务边界,降低 key 冲突风险。

Java 侧由 ecshopx-bootstrap 的 MultiRedisConfig 注册多套 RedisConnectionFactory / StringRedisTemplate,不依赖 Spring Boot 单实例自动配置覆盖全部场景。

多 Redis 逻辑库 ​

MultiRedisConfig 中的主要划分:

逻辑库 / Bean配置项典型用途
default(springDataRedisConnectionFactory)spring.data.redis.database平台默认库;dispatch 异步队列(dispatchBusStringRedisTemplate)等
companys(companysRedisTemplate,@Primary)ecshopx.redis.companys.database租户/公司维度缓存(主业务 Redis 模板默认注入)
prismecshopx.redis.prism.database(默认 2)Prism 网关相关缓存
datacubeecshopx.redis.datacube.database数据统计 / datacube 场景
depositecshopx.redis.deposit.database(默认 1),可独立 host储值/充值日累计等,如 dayRechargeTotal{yyyy-MM-dd}

可选扩展(同一配置类):members、espier、wechat — 通过 ecshopx.redis.<name>.host|port|password|database 覆盖。

本地 application-local.properties 示例:

properties
spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
spring.data.redis.password=redispassword
spring.data.redis.database=0
ecshopx.redis.companys.database=0
ecshopx.redis.prism.database=0
ecshopx.redis.datacube.database=0
ecshopx.redis.deposit.database=0

Docker Compose 默认 Redis 密码为 redispassword(见 本地 / Docker 部署)。

生产环境 应该 为不同业务分配不同 database 索引(或独立实例),避免混库 flush。

使用约定 ​

  1. 注入正确的 Template — 按业务选择 @Qualifier("companysRedisTemplate")、prismRedisTemplate、datacubeStringRedisTemplate 等,禁止假设「只有一个 Redis」。
  2. Key 设计 — 遵循 Redis 开发规范:业务前缀、冒号分隔、控制 bigkey、设置 TTL。
  3. 连接池与超时 — 使用框架提供的 Lettuce 工厂;validate-connection=true 缓解 Docker 空闲断连。
  4. 与 dispatch 的关系 — 异步任务队列使用 springDataRedisConnectionFactory 同一逻辑库,迁移或清库时需与运维确认,避免误删队列数据。

应用内 API 响应缓存 ​

Java 版当前不内置全局 GET 响应缓存中间件;若需对只读 GET 接口做响应缓存,可选方案:

  • 在 Service 层对稳定读模型使用 Redis 显式缓存(key 含 companyId、版本号等维度);
  • 在网关层做边缘缓存(见 网关缓存摘要)。

新增缓存时 必须 定义失效策略(配置变更、写操作删 key 或短 TTL)。

相关章节 ​