Redis缓存
  RuXuq8CpAyRj 2023年11月02日 16 0
什么是缓存

缓存就是数据交换的缓冲区(称作Cache [kae[]),是存贮数据的临时地方,一般读写性能较高。

缓存的作用

●降低后端负载

●提高读写效率,降低响应时间

缓存的成本

●数据一致性成本

数据库与缓存需要保持一致

●代码维护成本

查询数据,修改数据需要更新缓存,增加代码量

●运维成本

一般的缓存都是集群的形式

添加缓存

Redis缓存_Redis互斥锁

缓存更新策略

Redis缓存_缓存_02

业务场景:

●低一致性需求:使用内存淘汰机制。例如店铺类型的查询缓存

●高一致性需求:主动更新,并以超时剔除作为兜底方案。例如店铺详情查询的缓存


操作缓存和数据库时有三个问题需要考虑:

1.删除缓存还是更新缓存?

◆更新缓存: 每次更新数据库都更新缓存,无效写操作较多 (X)

◆删除缓存: 更新数据库时让缓存失效,查询时再更新缓存(推荐)

2.如何保证缓存与数据库的操作的同时成功或失败?

◆单体系统, 将缓存与数据库操作放在一个事务

◆分布式系统,利用TCC等分布式事务方案

3.先操作缓存还是先操作数据库?

◆先删除缓存,再操作数据库

◆先操作数据库,再删除缓存(更好)


缓存更新策略的最佳实践方案:

1.低一致性需求:使用Redis自带的内存淘汰机制

2.高一致性需求:主动更新,并以超时剔除作为兜底方案

◆读操作:

●缓存命中则直接返回

●缓存未命中则查询数据库,并写入缓存,设定超时时间

◆写操作:

●先写数据库,然后再删除缓存

●要确保数据库与缓存操作的原子性

缓存穿透

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。

Redis缓存_缓存击穿_03

常见的解决方案有两种:

●缓存空对象

优点:实现简单,维护方便

缺点:

●额外的内存消耗

●可能造成短期的不一致


●布隆过滤

Redis缓存_Redis_04

优点:内存占用较少,没有多余key

缺点:

●实现复杂

●存在误判可能

缓存雪崩

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。

Redis缓存_缓存_05

解决方案:

◆给不同的Key的TTL添加随机值

◆利用Redis集群提高服务的可用性

◆给缓存业务添加降级限流策略

◆给业务添加多级缓存


缓存击穿

缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。

Redis缓存_Redis_06

常见的解决方案有两种:

◆互斥锁

Redis缓存_Redis互斥锁_07

缺点:线程需要等待


◆逻辑过期

Redis缓存_缓存_08

Redis缓存_缓存_09

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
RuXuq8CpAyRj