缓存与分布式锁规范
# 缓存与分布式锁规范
# 缓存使用场景
- 读多写少且允许一定时间数据延迟的场景使用缓存
- 热点数据与配置数据优先进入缓存
- 对幂等接口的防重可结合短期缓存实现
# 缓存键设计
- 使用统一前缀表达业务域,例如
user:detail:{userId} - 避免使用可变或高碰撞风险的键
- 对 key 中的业务字段进行显式拼接,保证可读性
# 缓存配置
- 为不同类型数据设置合理的过期时间
- 对高频访问且更新不频繁的数据使用较长过期时间
- 对列表或聚合类缓存考虑同步更新策略
# 分布式锁使用
- 使用可靠的分布式锁实现库,例如 Redisson
- 锁 key 设计包含业务标识,例如
lock:order:create:{userId} - 设置合理过期时间与重入策略,避免死锁
RLock lock = redissonClient.getLock("lock:order:create:" + userId);
lock.lock();
try {
// 业务处理
} finally {
lock.unlock();
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 常见问题防护
- 对缓存穿透使用空值缓存或参数校验策略
- 对缓存击穿使用互斥锁或单飞策略
- 对缓存雪崩通过随机过期时间与多级缓存缓解