缓存及应用场景
1. 什么是缓存?
- 缓存一般有以下三种:
- 硬件
- 客户端缓存
- 服务端缓存
- 在计算中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快。通过缓存,可以高效地重用之前检索或计算的数据。
2. 应用场景
![](https://img.haomeiwen.com/i24177131/57d4eb8145a8b8f6.png)
- 常见场景
- 高并发查询
- 高并发写入
- 热点数据
- 大对象初始化
...
3. 使用缓存的好处
- 提升应用程序性能
- 降低数据库成本
- 减少后端负载
- 可预测的性能
- 消除数据库热点
- 提高读取吞吐量(IOPS)
![](https://img.haomeiwen.com/i24177131/7720796b24089891.png)
4. 缓存的常用类型
- 内存缓存(进程内缓存) 性能最好
- 分布式缓存
- 组合缓存(多级缓存)
缓存的特点与常见问题
1. 缓存的特点
-
设置存活时间(过期策略)
缓存通常设置有效期,过期后应当失效,常见的过期策略有:定时、定期、惰性失效 -
空间占用有限(淘汰策略)
缓存占用有空间上限,超过上限需淘汰部分缓存数据,常见的淘汰策略有:FIFO、LRU、LFU -
支持并发更新
缓存需要支持并发的读取写入
2. 常见问题 - 缓存穿透
即用户发起查询时,因为要查询的内容不存在缓存中,所以要查询数据库,但是数据库中也不存在该内容。故无法匹配,也无法将该内容存至缓存中,所以导致每次查询都要直接查询数据库的情况。
![](https://img.haomeiwen.com/i24177131/316bf279d848dbab.png)
3. 常见问题 - 缓存击穿
即某个内容在缓存中刚刚好失效的时候,突然来了很多访问该内容的并发请求,此时所有的请求都将直接访问数据库。
![](https://img.haomeiwen.com/i24177131/a4d4826598600c0d.png)
![](https://img.haomeiwen.com/i24177131/f79fbea96d046969.png)
4. 常见问题 - 缓存雪崩
大量缓存同时失效,导致大量请求穿过缓存访问到数据库。
![](https://img.haomeiwen.com/i24177131/67c0c7b6b56b7144.png)
![](https://img.haomeiwen.com/i24177131/eac1c206fb46e381.png)
常用内存缓存实现方式
-
Java容器
基于JDK自带的Map容器类:HashMap、ConcurrentHashMap -
Guava Cache
Google提供的Java增强工具包Guava的一个模块,社区活跃 -
Ehcache
重量级的内存缓存,支持2级缓存,Hibernate中默认的缓存框架 -
Caffeine
基于Guava API开发的高性能内存缓存,Spring5默认的内存缓存框架
如果觉得有收获就点个赞吧,更多知识,请点击关注查看我的主页信息哦~
网友评论