For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
缓存技术的应用在许多软件编程开发项目中都是非常常见的一个编程开发技术应用,下面我们就通过案例分析来简单了解一下,缓存击穿与缓存雪崩都有哪些解决方法。
一、缓存击穿问题
【单个热点key失效时,高并发查询数据库】
一个存在的热点key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到数据库,造成瞬时数据库请求量大压力骤增。
解决方法
使用分布式锁
保证在分布式情况下,使用分布式锁保证对于每个key同时只允许只有一个线程查询到后端服务,其他没有获取到锁的权限,只需要等待即可;这种高并发压力直接转移到分布式锁上,对分布式锁的压力非常大。获取到锁的请求将数据写入成功到redis中,通知没有获取锁的请求直接从Redis获取数据即可
使用本地缓存(双级缓存)
双击缓存机制
热点不过期
设置热点数据永不过期或者异步延长过期时间;
**到期前的续命
(在value设置一个比过期时间t0小的过期时间值t1,当t1过期的时候,延长t1并做更新缓存操作。)
二、缓存雪崩问题
缓存雪崩是指,由于缓存层承载着大量请求,有效的保护了存储层,但是如果缓存层由于某些原因整体不能提供服务(可能是机器宕机或大量的缓存(key)在同一时间失效-过期),于是所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层也会挂掉的情况。
场景【多个key同时失效,高并发查询数据库】
缓存雪崩指缓存服务器重启(没有持久化)或者大量的缓存集中在某个时间段失效,突然给数据库产生了巨大的压力,甚至击垮数据库的情况。
解决方案
对不用的数据使用随机动态分布的失效时间
使用集群化分摊部署我们key
使用二级缓存
使用分布式锁
数据预热:可以通过缓存reload机制,预先去更新缓存,再即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀
依赖隔离组件为后端限流并降级在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。