德阳吧

您现在的位置是:首页 > 生活百科 > 正文

生活百科

缓存是什么(什么是缓存击穿、缓存雪崩、缓存穿透?)

zhiyongz2024-05-06生活百科

缓存是什么
点击上方 蓝色字 ↑↑↑,关注公众号

在公众号回复课程,获取JAVA全栈课程

作者|颜 群

公众号|大数据和人工智能技术

很多人对缓存并不陌生,对Redis更是“非常熟悉”。那么,在设计缓存时有什么需要注意的吗?

在高并发环境下,缓存击穿、缓存雪崩和缓存穿透是首先要考虑的三个问题。

1.缓存击穿:某一个热点数据过期,造成大量请求直奔DB的现象。例如,在秒杀期间,可能有大量用户同时抢购iphone13。但如果恰好此时iphone13的缓存失效了,那么就会让所有访问iphone13的请求绕过缓存,直奔数据库,从而对数据库造成并发压力。

2.缓存雪崩:缓存击穿值得是“一个热点数据的缓存”,而缓存雪崩指的是“大量数据的缓存”。

例如,假设缓存服务器宕机、或者大量的缓存对象同时过期,那么就会造成缓存组件彻底失效,从而让所有请求涌向数据库,因此对数据库造成巨大压力。

3.缓存穿透:主要是指一种“恶意”的行为。一般而言,我们会将那些频繁查询的数据放入缓存,并不会缓存毫无意义的数据。但如果有人恶意的大量查询一些不存在的商品,那么这些查询请求就会绕过缓存而直达数据库,因此也会给数据库带来很大压力。例如,如果有人通过程序反复的请求服务器中的key=”asdfadf?@Ffsdf#SFSD”的数据,显然我们并不会缓存这种无意义的数据,因此这种请求就会绕过缓存,直接抵达数据库。

以上三者,如何解决吗?

1.解决缓存击穿:异步开启一个线程,用于监控热点数据的过期时间。如果发现快要过期了,就再开启一个线程去重置过期时间。当然,也可以简单一点:手工的将热点数据的缓存,设置为一段比较长的时间。例如,假设iphone13是2020年6月上市,就可以在6月的时候,将iphone13的缓存时间设置成1个月。

2.解决缓存雪崩:(1)搭建缓存集群,利用集群“失败迁移”的特性;(2)合理的分配缓存的过期时间,防止大量缓存在同一时间过期。

3.避免缓存穿透:对于不存在的商品,也将其以value=””的形式进行缓存(例如, key =”不存在的商品”, value =””)。但是,为了防止大量无效数据长时间占用缓存容量,可以将这些无意义缓存的过期时间设置的短一些。

在使用缓存时,还要注意加载缓存的时机。一般而言,在第一次select的时候将数据缓存起来即可。但在秒杀等高并发场景下,需要提前进行缓存。例如,可以在“双11”的前一天,就提前将热点数据缓存起来。

– 完-

推荐阅读

Java小白到大神的心路历程(Java SE)

答疑 | 面试全对,却没offer?

答疑 | 通俗解释前后端分离?

答疑 | 如何优化CAP?毕业设计如何选题?

扫描上方二维码回复「课程」即可获得JAVA全栈教程合集30+课程掌握 95% 的开发技能
觉得有用,请点在看↓↓↓

缓存是什么相关文章