Redis(九) 缓存设计

1 需要加缓存吗?

在构建和优化业务服务时,首先想到的应该是优化数据库,比如数据库模型设计、SQL结构化查询语句优化,慢查询往往是系统性能杀手。其次是使用缓存

权衡缓存的收益与成本:
缓存所带来的性能提升效果更直接、高效:高性能、高并发,读写速度快,降低后端负载。
任何系统使用缓存,都会遇到两大问题:数据不一致问题、系统复杂度增加。

2 缓存的设计与使用?

衡量缓存设计好坏的指标是缓存命中率,缓存的命中率=缓存命中次数/请求次数,命中率越高,缓存的使用率越高。
缓存的适用场景总的来说是缓存高频读低频写的数据。相反变化频率高、访问频率低的数据不适合缓存。

设计和使用缓存首先要了解服务、DB、Cache的性能情况。

2.1 选择分布式缓存的设计模式?

Cache Aside Pattern(数据不一致概率低,读操作多的场景)/
Read Write Through Pattern(应用端代码维护简单)/
Write Behind Pattern(写性能最高,写操作多的场景,但是数据安全性较差)
根据 读写场景、性能要求、数据不一致的容忍程度、代码维护 选择合适的模式。

2.2 缓存粒度控制?

缓存全部数据还是部分数据?
需要考虑缓存命中率、通用性、空间占用、代码复杂度。
缓存命中率:缓存全部数据的命中率低于缓存热点数据。
通用性:缓存全部数据比部分数据更加通用,但从实际经验看,很长时间内应用只需要几个重要的属性。
空间占用:缓存全部数据要比部分数据占用更多的空间。
代码复杂度:缓存全部数据的代码会更简洁。

2.3 如何保证缓存的数据是热点数据?

设置缓存淘汰策略用来保证缓存中存储的是热点数据。
为缓存数据设置过期时间。
低一致性业务建议配置最大内存和缓存淘汰策略(LRU LFU FIFO)的方式使用。
高一致性业务可以结合过期删除和主动更新策略。(双更 先更再删 异步重试)

2.4 缓存引入的问题?

缓存穿透 缓存击穿 缓存雪崩 数据不一致 主从不一致

总结:

深入业务,才能有好的设计。设计缓存时要根据业务特点,明白什么是不容易变的,什么是相对容易变,客户对于数据不一致性的容忍程度。这样才能发现真正应该缓存的点。

参考:
缓存设计:https://javakeeper.starfish.ink/data-management/Redis/Cache-Design.html
缓存的设计与使用:https://zhuanlan.zhihu.com/p/94847283

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值