google浏览器的清理缓存方式(Google的这个本地缓存真好用)
在平时的开发中,我们会经常用到字典,比如我们数据库里面存的是设备编码,展示需要的是设备名称;数据库中存的是用户id,展示的是用户名称。这样的字段我们会频繁的调用,那么就会频繁的查询数据库,为了保证访问速度,我们会使用缓存。但是如果使用Redis之类的中间件缓存,又有点大材小用。当然我们也可以自己将需要的数据存入Map中,但是要考虑Map的预计容量,数据缓存的时间等等。这样对Map的设计就比较麻烦。
这里我推荐Google的类库框架Guava里面的本地缓存。
使用前我们先引用Guava的Maven依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
我们先来写一个省会的实体类Province:
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
publicclassProvince{
//省会名称
privateStringname;
//省会编码如:PR001
privateStringcode;
}
这里定义两个字段,省会名称和省会编码。一般入库存的是编码code,展示的时候我们需要去专门的表里面查询获取name。
我们再来定义一个缓存失效的监听器CustomizeRemovalListener:
publicclassCustomizeRemovalListenerimplementsRemovalListener<String,Province>{
@Override
publicvoidonRemoval(RemovalNotification<String,Province>removalNotification){
Stringreason=String.format("key=%s,value=%s,reason=%s",removalNotification.getKey(),removalNotification.getValue(),removalNotification.getCause());
System.out.println(reason);
}
}
当我们手动失效缓存,或者过期时间到了,就会被监听到。控制台就会打印出reason。onRemoval()方法可以根据业务需求进行编写。
我们来使用缓存:
如上代码,我们调用loadingCache.get()方法时,会先在缓存中查找,如果缓存中没有,会执行这段代码:
//如果找不到元素,会调用这里
@Override
publicProvinceload(Strings){
//实际情况这里就是查库
System.out.println("查了数据库哦");
returngetDataFromDb();
}
我们就在这段代码中查库。在图示代码中,我们先创建一个初始缓存:
LoadingCache<String,Province>loadingCache=CacheBuilder.newBuilder()
.maximumSize(1000)//容量
.expireAfterWrite(3,TimeUnit.SECONDS)//过期时间
.removalListener(newCustomizeRemovalListener())//失效监听器
.build(cacheLoader);
这里创建了缓存的初始容量、过期时间、以及缓存失效后的监听功能。
我们将数据存入缓存中:
loadingCache.put("PR001",getDataFromDb());
前面3次获取都是从缓存loadingCache获取值,当线程睡眠4秒,超过过期时间,缓存会失效,触发监听器。第4次获取就会从load(String s)中获取。
控制台打印结果如下:
第一次获取:Province(name=北京, code=PR001)
第二次获取:Province(name=北京, code=PR001)
第三次获取:Province(name=北京, code=PR001)
key=PR001,value=Province(name=北京,code=PR001),reason=EXPIRED
查了数据库哦
第四次获取:Province(name=北京, code=PR001)
这段代码
key=PR001,value=Province(name=北京,code=PR001),reason=EXPIRED
显示缓存因超时而过期。
当然Guava还有很多功能哦,感兴趣的童鞋可以看看我写的这篇文章:
“
我用Java框架Guava解决了空指针异常问题
(https://blog.csdn.net/wujialv/article/details/108314430?ops_request_misc=%7B%22request%5Fid%22%3A%22160643779119725271078708%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fblog.%22%7D&request_id=160643779119725271078708&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-1-108314430.pc_v1_rank_blog_v1&utm_term=Guava&spm=1018.2118.3001.4450)
”
当然市面上还有很多本地缓存框架,比如Caffeine(Guava缓存的升级版)、Ehcache等。有兴趣的童鞋可以去了解下。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com