Guava缓存简单运用
开始之前先老规矩先介绍一下相关的理论,如缓存。缓存有着许多的分类有着各类特征,并且有着介质上的区别。比如有代理服务器缓存Nginx、NDS缓存、数据库缓存、应用程序缓存(本地缓存和分布式缓存)等。Local cache(本地缓存):在应用中的缓存组件,优点是和应用在一个进程内,请求速度非常快,但是不能在多个节点共享。remote cache(分布式缓存):与应用分离的服务,多个运用可以共享一个缓存。我们这里用到的Guava缓存(谷歌开源框架)是属于本地缓存。优点是性能比较高(拿空间换时间)、功能丰富、线程安全、提供多种缓存回收机制。
官网地址:CachesExplained · google/guava Wiki · GitHub
在使用之前得导入相关的Maven依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
一些配置:
1、设置缓存的初始容量,这个容量的设置要大小合理,因为扩容的代价比较昂贵,合理的初始容量能够减少容器的扩容次数.
CacheBuilder.newBuilder().initialCapacity(10).build();
2、最大值的配置,指定缓存能够储存的最大记录数。当到达记录数后会先从缓存对对象中选择一条删除后在将新对象存储进去。
CacheBuilder.newBuilder().maximumSize(100) .build();
3、设置缓存的并发级别
CacheBuilder.newBuilder().concurrencyLevel(5) .build();
4、设置缓存清除的时间即过期时间(缓存的过期策略的固定时间)
CacheBuilder.newBuilder().expireAfterWrite(600,TimeUnit.SECONDS).build();
介绍完这些后我们来进行一个简单实例演示:这里我们在项目中我们选择将封装为一个工具类并注入容器中方便使用,这里为了方便效果的展示,在控制台打印一下sql的执行.代码如下:
在Postman发出请求结果和控制台的打印如下:
从控制台的打印结果看除了第一次缓存里没有值时没有从缓存中取而是去数据库中查询了,之后几次都是从缓存中取到的。
希望路过的大佬不要嫌弃,若有不对之处还希望指正为谢!@~@