概述
《github官网介绍》
对于 Java 11 或更高版本,请使用,3.1.x否则使用2.9.x.
缓存添加策略
手动加载
Cache<Key, Graph> cache = Caffeine.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES)
.maximumSize(10_000)
.build();
// 查找一个缓存元素, 没有查找到的时候返回null
Graph graph = cache.getIfPresent(key);
// 查找缓存,如果缓存不存在则生成缓存元素,
如果无法生成则返回null
graph = cache.get(key, k -> createExpensiveGraph(key));
// 添加或者更新一个缓存元素
cache.put(key, graph);
// 移除一个缓存元素
cache.invalidate(key);
自动加载
LoadingCache<Key, Graph> cache = Caffeine.newBuilder()
.maximumSize(10_000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(key -> createExpensiveGraph(key));
// 查找缓存,如果缓存不存在则生成缓存元素,
如果无法生成则返回null
Graph graph = cache.get(key);
// 批量查找缓存,如果缓存不存在则生成缓存元素
Map<Key, Graph> graphs = cache.getAll(keys);
手动异步加载
AsyncCache<Key, Graph> cache = Caffeine.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES)
.maximumSize(10_000)
.buildAsync();
// 查找一个缓存元素, 没有查找到的时候返回null
CompletableFuture<Graph> graph = cache.getIfPresent(key);
// 查找缓存元素,如果不存在,则异步生成
graph = cache.get(key, k -> createExpensiveGraph(key));
// 添加或者更新一个缓存元素
cache.put(key, graph);
// 移除一个缓存元素
cache.synchronous().invalidate(key);
自动异步加载
AsyncLoadingCache<Key, Graph> cache = Caffeine.newBuilder()
.maximumSize(10_000)
.expireAfterWrite(10, TimeUnit.MINUTES)
// 你可以选择: 去异步的封装一段同步操作来生成缓存元素
.buildAsync(key -> createExpensiveGraph(key));
// 你也可以选择: 构建一个异步缓存元素操作并返回一个future
.buildAsync((key, executor) -> createExpensiveGraphAsync(key, executor));
// 查找缓存元素,如果其不存在,将会异步进行生成
CompletableFuture<Graph> graph = cache.get(key);
// 批量查找缓存元素,如果其不存在,将会异步进行生成
CompletableFuture<Map<Key, Graph>> graphs = cache.getAll(keys);
demo
pom.xml
<!--Caffeine本地缓存-->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.9.3</version>
</dependency>
main
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.TimeUnit;
public class CaffeineDemo {
private static final Logger log = LoggerFactory.getLogger(CaffeineDemo.class);
/**
* 驱逐:缓存元素因为策略被移除
* 失效:缓存元素被手动移除
* 移除:由于驱逐或者失效而最终导致的结果
*/
public static void main(String[] args) throws InterruptedException {
//自动加载元素到缓存当中
LoadingCache<Object, Object> cache = Caffeine.newBuilder()
.maximumSize(10_000)
//
.expireAfterAccess(3, TimeUnit.SECONDS)//超过时间就驱逐
.expireAfterWrite(3, TimeUnit.SECONDS)//写入到内存多久以后过期(和上面这个各选一个就行了,官方推荐这个)
.build(k -> null);//我直接返回null了,不想构建,这里应为对应的一个k -> createExpensiveGraph(key)方法
cache.put("name", "Meta");//添加或者更新一个缓存元素
cache.put("name2", "Meta39");
Thread.sleep(2000);
log.info("{}",cache.getIfPresent("name"));//查找一个缓存元素, 没有查找到的时候返回null
log.info("name,{}", cache.get("name"));//查找缓存,如果缓存不存在则生成缓存元素,
如果无法生成则返回null(比getIfPresent多了一步)
log.info("name2,{}", cache.get("name2"));
cache.invalidate("name");//移除,不管时间到没到都会移除。也可以用监听器去监听移除的内容
log.info("name已被移除,{}", cache.get("name"));
log.info("name2未被移除,{}", cache.get("name2"));
cache.invalidateAll();// 移除所有key
}
}
最后
以上就是可靠哈密瓜为你收集整理的caffeine 一个Java的高性能、接近最优的缓存库缓存添加策略demo的全部内容,希望文章能够帮你解决caffeine 一个Java的高性能、接近最优的缓存库缓存添加策略demo所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复