1、缓存定义
存储在计算机上的一个原始数据复制集,以便于访问。
2、不同种类缓存
(1)本地缓存
本地缓存和应用同属于一个进程,使用不当会影响服务稳定性,所以通常需要考虑更多的因素,例如容量限制、过期策略、淘汰策略、自动刷新等。常用的本地缓存方案有:
1)根据HashMap自实现本地缓存
缓存的本质就是存储在内存中的KV数据结构,对应的就是jdk中的HashMap,但是要实现缓存,还需要考虑并发安全性、容量限制等策略
2)Guava Cache
3)Caffeine
Caffeine是基于java8实现的新一代缓存工具,缓存性能接近理论最优。
相比Guava Cache来说,Caffeine无论从功能上和性能上都有明显优势。同时两者的API类似,使用Guava Cache的代码很容易可以切换到Caffeine,节省迁移成本。需要注意的是,SpringFramework5.0(SpringBoot2.0)同样放弃了Guava Cache的本地缓存方案,转而使用Caffeine。
4)Encache
总结
从易用性角度,Guava Cache、Caffeine和Encache都有十分成熟的接入方案,使用简单。
从功能性角度,Guava Cache和Caffeine功能类似,都是只支持堆内缓存,Encache相比功能更为丰富
从性能上进行比较,Caffeine最优、GuavaCache次之,Encache最差(下图是三者的性能对比结果)
(2)分布式缓存
redis或者memcache
参考 缓存选型
3、不同级别缓存举例
(1)边缘缓存:Nginx应用服务器的缓存解决了热点数据的缓存问题
(2)应用级缓存:Redis分布式缓存集群减少了访问回源率
(3)平台级缓存:tomcat应用集群使用的缓存防止了相关缓存失效/崩溃之后的冲击。
(4)数据库缓存:提升数据库查询时的效率。
(5)公有云缓存服务:阿里云、百度都推出了基于Redis的云存储服务。