谷歌开源缓存Guava Cache使用
时间:2021-04-22
本文章向大家介绍谷歌开源缓存Guava Cache使用,主要包括谷歌开源缓存Guava Cache使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.分布式缓存和本地缓存简介
- 什么是缓存
- 程序经常要调用的对象存在内存中,方便其使用时可以快速调用,不必去数据库或者其他持久化设备中查询,主要是提高性能
- DNS缓存、前端缓存、代理服务器缓存Nginx、应用程序缓存(本地缓存、分布式缓存)、数据库缓存
- 分布式缓存
- 与应用分离的缓存组件或服务,与本地应用隔离一个独立的应用,多个应用可直接的共享缓存
- 常见的分布式缓存:Redis、Memcached等
- 本地缓存
- 和业务一起的缓存,例如mybatis的一级或者二级缓存,本地缓存速度最快,但不能在多个节点共享
- 常见的本地缓存:mybatis一级缓存二级缓存;框架本身的缓存;Redis本地单机服务;ehcache;guava cache;Caffeine等
2.谷歌开源缓存框架Guava Cache使用
-
添加依赖
<!--guava缓存依赖包--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency>
-
封装API
package com.gen.utils; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import lombok.Data; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; @Component @Data public class BaseCache { private Cache<String, Object> tenMinuteCache = CacheBuilder.newBuilder() // 设置缓存初始大小,应合理设置,后续会扩容 .initialCapacity(10) // 最大值 .maximumSize(100) // 并发数设置 .concurrencyLevel(5) // 缓存过期时间:写入后10分钟过期 .expireAfterWrite(10, TimeUnit.MINUTES) // 统计缓存命中率 .recordStats().build(); }
-
缓存key管理类
package com.gen.config; /** * 缓存key管理类 */ public class CacheKeyManager { // 首页轮播图缓存key public static final String INDEX_BANNER_KEY = "index:banner"; }
-
ServiceImpl类使用
@Override public List<VideoBanner> listBanner() { List<VideoBanner> list = null; try { Object cacheObj = this.baseCache.getTenMinuteCache().get(CacheKeyManager.INDEX_BANNER_KEY, () -> { List<VideoBanner> videoBannerList = this.videoMapper.listBanner(); System.out.println("数据库查询轮播图列表"); return videoBannerList; }); if (cacheObj instanceof List) { list = (List<VideoBanner>) cacheObj; } }catch (Exception e){ e.printStackTrace(); } return list; }
原文地址:https://www.cnblogs.com/Gen2021/p/14691585.html
- HDUOJ----(1175)连连看
- HDUOJ-----(1072)Nightmare(bfs)
- deque容器的运用一点一点积累
- HDUOJ----(1016)Prime Ring Problem
- WordPress获取文章浏览总数
- HDUOJ----Safecracker(1015)
- hduoj---Tempter of the Bone
- nyoj------------找球号(一)
- nyoj------擅长排列的小明
- HDUOJ-------(1211)RSA
- HDUOJ----1301 Jungle Roads
- try语句...
- HDUOJ---1233还是畅通工程
- HDUOJ---1863畅通工程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法