什么是缓存
缓存就是数据交换的缓冲区(称作Cache [kae[]),是存贮数据的临时地方,一般读写性能较高。
缓存的作用
●降低后端负载
●提高读写效率,降低响应时间
缓存的成本
●数据一致性成本
数据库与缓存需要保持一致
●代码维护成本
查询数据,修改数据需要更新缓存,增加代码量
●运维成本
一般的缓存都是集群的形式
添加缓存
缓存服务器托管网更新策略
业务场景:
●低一致性需求:使用内存淘汰机制。例如店铺类型的查询缓存
●高一致性需求:主动更新,并以超时剔除作为兜底方案。例如店铺详情查询的缓存
操作缓存和数据库时有三个问题需要考虑:
1.删除缓存还是更新缓存?
◆更新缓存: 每次更新数据库都更新缓存,无效写操作较多 (X)
◆删除缓存: 更新数据库时让缓存失效,查询时再更新缓存(推荐)
2.如何保证缓存与数据库的操作的同时成功或失败?
◆单体系统, 将缓存与数据库操作放在一个事务
◆分布式系统,利用TCC等分布式事务方案
3.先操作服务器托管网缓存还是先操作数据库?
◆先删除缓存,再操作数据库
◆先操作数据库,再删除缓存(更好)
缓存更新策略的最佳实践方案:
1.低一致性需求:使用Redis自带的内存淘汰机制
2.高一致性需求:主动更新,并以超时剔除作为兜底方案
◆读操作:
●缓存命中则直接返回
●缓存未命中则查询数据库,并写入缓存,设定超时时间
◆写操作:
●先写数据库,然后再删除缓存
●要确保数据库与缓存操作的原子性
缓存穿透
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。
常见的解决方案有两种:
●缓存空对象
优点:实现简单,维护方便
缺点:
●额外的内存消耗
●可能造成短期的不一致
●布隆过滤
优点:内存占用较少,没有多余key
缺点:
●实现复杂
●存在误判可能
缓存雪崩
缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。
解决方案:
◆给不同的Key的TTL添加随机值
◆利用Redis集群提高服务的可用性
◆给缓存业务添加降级限流策略
◆给业务添加多级缓存
缓存击穿
缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。
常见的解决方案有两种:
◆互斥锁
缺点:线程需要等待
◆逻辑过期
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 跃居榜首!取代 MySQL 成为最受欢迎的数据库!
2023年5月,超过9万名开发人员参与了Stackoverflow年度调查,调查内容主要涉及开发者如何学习和升级,他们正在使用哪些工具,以及他们想要哪些工具。 「PS:我们节选了相关数据库的信息,分享给大家。」 今年,PostgreSQL取代了 MySQL位居…