缓存redis

缓存redis:

 

在服务器内部存储sql的查询结果,如果有结果,就将查询结果缓存,下次再有查询直接先查询缓存,减少数据库的访问量,加快程序反应速度

内部是(k,v)的结构

缓存击穿:

过期:某个数据缓存失效时,大量请求涌入数据库,(访问同一个商品)

新增:新增的产品还没有进入缓存中

解决方式:

  1. 设置缓存永不过期
  2. 增加互斥锁,只有一个请求可以到达数据库,其他请求稍后返回缓存(redis)中,(访问多个商品)

缓存穿透

恶意攻击,使用负数,0值,无效值,redis查不到,无法拦截。缓存起不到作用,此时缓存就好像被“穿透”了一样,起不到任何作用。

  1. 内部是(k,v)的结构k是由规则的,可以根据规则来提前抵挡攻击
  2. 拉黑ip
  3. 接口校验,提前进行数据判断,阻挡不正确的访问
  4. 设置一个空值返回结果在缓存中

缓存雪崩

多个数据缓存失效后,导致大量查询请求涌入数据库

  1. 缓存服务器挂了
  2. 高峰期缓存大量失效
  3. 热点缓存失效,对热点数据持续高并发

解决方式:

1.调整缓存过期的时间       

  • 设置数据永不过期,
  • 设置缓存失效为随机,避免缓存同时失效,
  • 设置缓存更新,每次访问刷新缓存时间

2.使用互斥锁,放止热点高并发访问

3.设置限流模式

4.超时机制设计

  1. 等待超时,如果等待请求的时间过长,丢弃任务
  2. 运行超时,运行时间超过时长,结束任务(内部可能发生了锁冲突等问题)

5.设置双缓存方案,设置redis集群

  • 主缓存:主要使用的缓存,主存失效后从数据库加载最新信息
  • 备份缓存:长期有效,获取锁失败读取的缓存,主存更新时需要同步更新备份

在集群中,即使某一个redis挂了,其他redis服务,仍可以继续处理请求,最好配合降级服务使用

6.发生缓存雪崩时,还可以使用本地缓存

多台机器上部署的缓存服务实例的内存中,还有一套 ehcache 的缓存,还能支撑一阵

7.发生雪崩后,恢复备份的redis

shiyongRDB,AOF结合方式恢复缓存

8.熔断降级

熔断:当缓存服务器宕机或超时响应时,为了防止整个系统出现雪崩,暂时停止业务服务访问缓存系统。

降级:当出现大量缓存失效,而且处在高并发高负荷的情况下,在业务系统内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的 fallback(退路)错误处理信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sayhitoloverOvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值