Featured image of post Redis 缓存设计

Redis 缓存设计

一 穿透优化缓存空对象和布隆过滤器方案对比解决缓存穿透适用场景维护成本缓存空对象数据命中不高数据频繁变化实时

一 穿透优化

缓存空对象和布隆过滤器方案对比

解决缓存穿透

适用场景

维护成本

缓存空对象

  • 数据命中不高

  • 数据频繁变化实时性高

  • 代码维护简单

  • 需要过多的缓存空间

  • 数据不一致

布隆过滤器

  • 数据命中不高

  • 数据相对固定实时性低

  • 代码维护复杂

  • 缓存空间占用少

二 无底洞优化

四种批量操作解决方案对比

方案

优点

缺点

网络IO

串行命令

  1. 编程简单

  2. 如果少量keys,性能可以满足要求

大量keys请求延迟严重

O(keys)

串行IO

  1. 编程简单

  2. 少量节点,性能满足要求

大量node 延迟严重

O(nodes)

并行IO

利用并行特性,延迟取决于最慢的节点

  1. 编程复杂

  2. 由于多线程,问题定位可能较难

O(max_slow(nodes))

hash_tag

性能最高

  1. 业务维护成本较高

  2. 容易出现数据倾斜

O(1)

三 雪崩优化

  • 保证缓存层服务高可用性

  • 依赖隔离组件为后端限流并降级

  • 提前演练

四 热点key 重建优化

两种热点key 的解决方法

解决方案

优点

缺点

简单分布式锁

  • 思路简单

  • 保证一致性

  • 代码复杂度增大

  • 存在死锁的风险

  • 存在线程池阻塞的风险

永远不过期

基本杜绝热点key 问题

  • 不保证一致性

  • 逻辑过期时间增加代码维护成本和内存成本

Image

关注公众号 获取更多精彩内容

位旅人路过 次翻阅 初次见面