网关缓存摘要
定位
生产环境可在 OpenResty(Nginx + Lua) 反向代理层对指定 GET 路径做 API 边缘缓存:网关判断 URL 白名单后,从 Redis 或 Memcached 读取已缓存的 HTTP 响应;未命中则回源至 Java 应用,并按 TTL 写回缓存。可配合 srcache 等模块实现。
ecshopx-java 仓库不内置、不发布上述 Lua 脚本与 Nginx 片段。 本节仅作可选网关缓存思路摘要;具体安装、路径、脚本维护由运维侧按 OpenResty 文档实施。
思路概要
| 组件 | 作用 |
|---|---|
| OpenResty | 在 Nginx 反向代理层执行 Lua,决定 cache key、TTL、是否回源 |
| Redis / Memcached | 存储序列化后的 HTTP 响应体 |
| 配置清单 | 按 URL 配置 expire(秒),常见为小程序只读配置类接口(如 common/setting、pagestemplate 等) |
典型流程:
- 请求进入 Nginx → Lua 判断 URL 是否命中缓存白名单;
- 命中则读 Redis/Memcached;未命中则
proxy_pass到 Java 应用(如127.0.0.1:18080); - 回源成功后按 TTL 写回缓存;响应头可带
X-Cache: Hit/Miss类标识。
与 Java 应用的关系
- Java 应用 无需 为网关缓存单独改代码;缓存的是完整 HTTP 响应(需注意鉴权:仅适合匿名或稳定公共 GET)。
- 部署时 Nginx upstream 指向 ecshopx-java 监听端口(默认
18080)。 - Redis 逻辑库 应该 与主业务库分离(cache 使用独立
databaseindex),避免flushdb误伤业务 key。
OpenResty 官方:https://openresty.org/cn/
何时考虑网关缓存
适合:读多写少、响应体较大、可容忍秒级延迟的公共配置接口。
不适合:强鉴权个性化接口、写操作、强一致读;此类应在应用层 Redis 缓存(见 应用缓存)或不做缓存。
相关章节
- 应用缓存 — Java 多 Redis 逻辑库与 Service 层缓存
- 路由与 API 分组 — URL 前缀约定
- 本地 / Docker 部署 — 端口与反向代理
