应规范化RESTful API缓存键:按字母序排序查询参数、移除空值/默认值、统一小写及路径格式;键应反映资源内容而非调用方式,区分版本、环境与租户,且不包含敏感信息。

直接用RESTful API路径做缓存键是常见做法,但必须规范化,否则相同语义的请求可能生成不同缓存键,导致缓存击穿或冗余存储。
统一路径格式,去除歧义
原始路径如 /api/tasks?id=123&sort=desc 和 /api/tasks?sort=desc&id=123 逻辑一致,但字符串不同。规范化需:
- 对查询参数按字母序排序(如
id=123&sort=desc) - 移除空值、默认值参数(如
page=1若为默认页,应忽略) - 标准化路径分隔符和大小写:全部小写,不允许多余斜杠(
/api/tasks//1→/api/tasks/1)
区分资源标识与操作意图
缓存键应反映“数据内容”,而非“调用方式”。例如:
-
GET /api/users/123和GET /api/users?id=123应映射到同一键,如users:123 - 避免把认证头、客户端IP等非资源属性混入路径键;它们应影响缓存策略(如 private),而非键本身
- 对集合接口,将分页参数纳入键结构但保持语义清晰,如
users:list:page=2:size=20,而非拼接原始URL
引入版本与环境上下文
同一路径在不同API版本或部署环境(测试/生产)下返回不同数据,缓存键需隔离:
- 在键前缀中显式加入版本号,如
v2:users:123或prod:v2:users:123 - 不依赖 Host 头或域名推导环境,而由配置明确指定环境标识
- 若支持多租户,租户ID应作为键的一部分,如
tenant-a:v2:users:123
避免敏感信息泄露
缓存键会出现在日志、监控或缓存系统管理界面,不能含敏感字段:
- 禁止将 access_token、session_id、手机号、邮箱等直接写入键名
- 如需按用户个性化缓存,用脱敏后的用户ID哈希(如 SHA256(uid) 前8位)代替明文
- 对含认证的私有资源,建议使用
private缓存策略 + 客户端本地缓存,而非服务端共享缓存键


















