性能设计--缓存

最常见的性能问题–慢查询

原因:
1.selectjoin,group,order,like等复杂的语义
2.大多数应用都是读多写少 (读写分离,分库分表,分布式数据库)

使用缓存场景

1.分布式系统远程调用,响应时间下降,降低性能
2.数据实时性要求不高的情况

三种模式

1. Cache Aside
2. Read/Write Through
3. Write Behind Caching

Cache Aside 模式

查询:
应用在 cache中查数据,有则返回,没有则从数据库中查,成功后放入缓存,返回结果

更新:
应用 先更新 数据库,成功后 让缓存失效(是失效不是更新)

注:
更新的时候是对缓存失效,不是更新,如果是更新的话,两个并发写操作会导致脏数据。

并发问题:
一个读操作,没有命中缓存 ,进入数据库查询,此刻出现写操作,写操作更新完数据库,失效缓存,这个时候,读操作出了数据库,把之前的旧数据放入缓存,导致缓存和数据库不一致。

这个出现的概率比较低,相当于一个读操作比写操作先进入数据库 ,却比写操作后出数据库。   一般情况下 写会耗费更多时间

解决方法:
1.2pc|Paxos协议保证一致性
2.降低出现概率
3.合理设置缓存过期时间

Read/Write Through 模式

应用程序只对接 缓存 ,缓存作为代理同步到数据库
更新的时候,没命中缓存,直接更新数据库

Write Behind Caching 模式

原理和操作系统linux 的write back一样
在更新数据的时候,只更新缓存,不更新数据库,而缓存会异步地批量更新数据库。
能有效提高数据库IO,但是存在数据丢失的情况,数据不是强一致性。

参考 Redis

参考 Redis和Mysql的结合方案演进

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值