应用缓存
概述
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 模板默认注入) |
| prism | ecshopx.redis.prism.database(默认 2) | Prism 网关相关缓存 |
| datacube | ecshopx.redis.datacube.database | 数据统计 / datacube 场景 |
| deposit | ecshopx.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=0Docker Compose 默认 Redis 密码为 redispassword(见 本地 / Docker 部署)。
生产环境 应该 为不同业务分配不同 database 索引(或独立实例),避免混库 flush。
使用约定
- 注入正确的 Template — 按业务选择
@Qualifier("companysRedisTemplate")、prismRedisTemplate、datacubeStringRedisTemplate等,禁止假设「只有一个 Redis」。 - Key 设计 — 遵循 Redis 开发规范:业务前缀、冒号分隔、控制 bigkey、设置 TTL。
- 连接池与超时 — 使用框架提供的 Lettuce 工厂;
validate-connection=true缓解 Docker 空闲断连。 - 与 dispatch 的关系 — 异步任务队列使用
springDataRedisConnectionFactory同一逻辑库,迁移或清库时需与运维确认,避免误删队列数据。
应用内 API 响应缓存
Java 版当前不内置全局 GET 响应缓存中间件;若需对只读 GET 接口做响应缓存,可选方案:
- 在 Service 层对稳定读模型使用 Redis 显式缓存(key 含 companyId、版本号等维度);
- 在网关层做边缘缓存(见 网关缓存摘要)。
新增缓存时 必须 定义失效策略(配置变更、写操作删 key 或短 TTL)。
相关章节
- Redis 开发规范
- 配置与环境变量
- 本地 / Docker 部署 — compose Redis 密码与多库说明
