caffetne本地缓存--Java实现
本地缓存适合服务器之间不需要共享的数据,同时本地缓存速度更快,直接从内存中读取,也不需要网络IO
一般场景:
- 数据量有限的小型数据集
- 不需要服务器之间相互共享的数据
- 高频、低延迟的场景(用户临时会话信息、短期热点数据)
一、引入依赖
<!-- 本地缓存 Caffeine -->
<dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.1.8</version>
</dependency>
注意:caffeine依赖版本的运用
3.x
基于 JDK 11 编译,在 JDK 8 下无法运行;2.x
在 JDK 11+ 仍可使用,但无法获得性能优化和新特性。
二、代码实现
private final Cache<String, String> LOCAL_CACHE =Caffeine.newBuilder().initialCapacity(1024).maximumSize(10000L)// 缓存 5 分钟移除.expireAfterWrite(5L, TimeUnit.MINUTES).build();@PostMapping("/list/page/vo/cache")
public List<Object> getCaffeineCache() {// 限制爬虫--一次只能读取多少条数据// 构建缓存 keyString cacheKey = "xxxxxxx";// 从本地缓存中查询String cachedValue = LOCAL_CACHE.getIfPresent(cacheKey);if (cachedValue != null) {// 如果缓存命中,返回结果List<Object> cached = JSONUtil.toBean(cachedValue, Object.class);return cached;}// 查询数据库List<Object> cachedVo = new ArrayList<>();// 存入 Cache 缓存String cacheValue = JSONUtil.toJsonStr(cachedVo );LOCAL_CACHE.put(cacheKey, cacheValue);// 返回结果return cachedVo ;
}