首先理解什么是缓存、为什么要使用缓存、缓存能带来什么样的好处、并且缓存会存在哪些问题等。
什么是缓存
缓存简单来说就是数据交换中的缓冲区。当程序或者硬件读取某种数据时、优先通过硬件以及内存方式进行获取、提高获取的效率以及速度、目的是让程序或者硬件相关的东西加速运行。
一般缓存分为5种方案
操作系统磁盘缓存 -->减少机器的交互
数据库缓存-->减少IO操作
应用程序缓存-->减少不必要的数据库操作、减少对数据库的相关链接等
web服务器缓存-->减少应用服务器的相关请求
浏览器缓存-->减少对网站访问
为什么要使用缓存
使用缓存所带:来的好处有以下几种
1:减少调用次数
2:减少不必要的性能开销
3:加速用户访问
4:提高程序的性能
当我们知道缓存所带来的好处后、那么使用中会出现什么问题呢。应该怎么设计呢。首先、我们先从使用缓存所带来的问题来说明以下几种情况
什么适合使用缓存
使用缓存的几大要素
1:常读少写
2:热数据应用(常用的信息、进行Query)
3:统计&排行榜
缓存穿透
缓存穿透代表你在设计缓存的使用、用户通过绕过缓存方式访问、让系统请求全部落地在对应的DB上、
比如你缓存有userId =1,value=张三,但是用户发送的请求是userId=2、这时、所有的请求都会先请求你缓存中是否存在、若不存在则会访问数据库、若发送1000个,1W个会同时访问缓存、数据库等、此时的开销会比你不加缓存的时候性能更受影响。
避免此方式的解决办法是以下几种、
1:将访问不存在的资源+上锁执行写个对应存在用户的空值进去、后续请求会直接返回对应Null值
2:将访问不存在的资源+锁通过缓存预热方式写入缓存、下面会介绍什么是缓存预热
缓存雪崩
我们设置缓存时过期时间统一、此时缓存统一时刻失效、所有的访问全查询到DB。避免此方式的解决办法是以下几种
1:保证缓存一直有效、定时更新缓存。
2:将时间岔开、分别更新对应缓存
缓存击穿
我们设置了缓存的有效时间、当缓存失效时高并发的访问、让请求全部落在DB上。避免此方式的解决办法是以下几种
1:提前刷新缓存、比如设置超时30分钟失效。在29分钟时刷新缓存
2:加锁机制、过期后访问若不存在则加锁、查询DB在写入缓存、
缓存预热
此是写缓存方案、项目启动或者启动缓存服务器写入缓存、定时更新等
缓存降级
当缓存服务出现问题时、通过某种方式关闭缓存访问、
领取专属 10元无门槛券
私享最新 技术干货