-
-
-
com.github.ben-manes.caffeine -
caffeine -
2.9.3 -
1)普通使用
- // 普通缓存
- cache = Caffeine.newBuilder()
- .expireAfterWrite(10, TimeUnit.MINUTES)
- .maximumSize(1000) // 设置缓存的最大容量
- .build();
- // 查找一个缓存元素, 没有查找到的时候返回null
- MyObject graph = cache.getIfPresent(key);
- // 查找缓存,如果缓存不存在则生成缓存元素, 如果无法生成则返回null
- graph = cache.get(key, k -> userService.getUserCache((Integer) key));
- // 添加或者更新一个缓存元素
- cache.put(key, graph);
- // 移除一个缓存元素
- cache.invalidate(key);
2)同步缓存
- // 同步自动加载缓存
- autoCache = Caffeine.newBuilder()
- .expireAfterWrite(10, TimeUnit.MINUTES) // 设置写入后的过期时间
- .maximumSize(1000) // 设置缓存的最大容量
- .build(key -> userService.getUserCache((Integer) key));
- //缓存未命中会自动调用当前方法,将数据库获取到的数据缓存到Caffeine
-
- graph = cache.get(key);
- // 添加或者更新一个缓存元素
- cache.put(key, graph);
- // 移除一个缓存元素
- cache.invalidate(key);
3)异步缓存
- // 异步加载缓存
- asyncCache = Caffeine.newBuilder()
- .expireAfterWrite(10, TimeUnit.MINUTES) // 设置写入后的过期时间
- .maximumSize(1000) // 设置缓存的最大容量
- .buildAsync().synchronous();
-
- // 查找缓存,如果缓存不存在则生成缓存元素, 如果无法生成则返回null
- graph = cache.get(key, k -> userService.getUserCache((Integer) key));
- // 添加或者更新一个缓存元素
- cache.put(key, graph);
- // 移除一个缓存元素
- cache.invalidate(key);
4.异步自动缓存
- // 异步自动加载缓存
- autoAsyncCache = Caffeine.newBuilder()
- .expireAfterWrite(10, TimeUnit.MINUTES) // 设置写入后的过期时间
- .maximumSize(1000) // 设置缓存的最大容量
- .buildAsync(key ->
- // 异步加载缓存逻辑
- userService.getUserCache((Integer)key)
- );
- graph = cache.get(key);
- // 添加或者更新一个缓存元素
- cache.put(key, graph);
- // 移除一个缓存元素
- cache.invalidate(key);
5.自定义每个缓存过期时间
- //首先自定义过期时间
- expireAfterCache = Caffeine.newBuilder().expireAfter(new Expiry
- @Override
- public long expireAfterCreate(@NonNull Object key, @NonNull Object value, long currentTime) {
- return currentTime;
- }
-
- @Override
- public long expireAfterUpdate(@NonNull Object key, @NonNull Object value, long currentTime, @NonNegative long currentDuration) {
- return currentDuration;
- }
-
- @Override
- public long expireAfterRead(@NonNull Object key, @NonNull Object value, long currentTime, @NonNegative long currentDuration) {
- return currentDuration;
- }
- }).maximumSize(1000).build();
-
- // 添加或者更新一个缓存元素
- expireAfterCache.policy().expireVariably().ifPresent(p->{
- //为每个key设置不同的过期时间,可自行封装下
- p.put("cs","123",5,TimeUnit.SECONDS);
- });
-
- // 查找一个缓存元素, 没有查找到的时候返回null
- MyObject graph = expireAfterCache.getIfPresent(key);
-
- // 移除一个缓存元素
- expireAfterCache.invalidate(key);