概述
目录
Caffeine相关参数
缓存大小
过期策略
填充策略
Caffeine框架中Cache的使用
同步需要手动维护——Cache
同步可设置缓存自动触发加载——LoadingCache
异步需手动维护——AsyncCache
异步可设置缓存自动触发加载——AsyncLoadingCache
在本地(进程)缓存方面,常见的缓存框架有ehcache、GuavaCache、Caffeine等方案。Caffeine是其中性能最好的一个。
Caffeine相关参数
缓存大小
使用maximumSize方法设置缓存的最大长度
过期策略
在Caffeine中有界缓存中三个设置过期方法:expireAfterAccess、expireAfterWrite、expireAfter。
- expireAfterWrite:代表着写了之后多久过期。(上面列子就是这种方式)
- expireAfterAccess: 代表着最后一次访问了之后多久过期。
- expireAfter:在expireAfter中需要自己实现Expiry接口,这个接口支持create,update,以及access了之后多久过期。注意这个API和前面两个API是互斥的。这里和前面两个API不同的是,需要你告诉缓存框架,他应该在具体的某个时间过期,也就是通过前面的重写create,update,以及access的方法,获取具体的过期时间。
填充策略
Caffeine 中有三种填充策略:手动、同步和异步。
Caffeine框架中Cache的使用
基于三种不同填充策略对应提供了多种不同类型Cache提供给我们使用,下面具体看一下。
同步需要手动维护——Cache
同步是指对缓存实例中元素的get,put等操作是同步执行的;手动维护是需要我们手动显示调用API实现对实例中元素的缓存维护。
//初始化Cache对象实例
Cache<Object, Object> cache = Caffeine.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES)//设置过期时间为10分钟
.maximumSize(1000)//最大长度为1000
.build();
//添加(不存在)或者更新(key存在)缓存元素
cache.put(key, obj);
// 移除一个缓存元素
cache.invalidate(key);
//从cache实例中获取key对应的缓存value 如果不存在key返回null
Object obj = cache.getIfPresent(key);
//从cache实例中获取key对应的缓存value 如果不存在key就通过createObject方法生成缓存返回value,如果createObject方法执行失败返回null
Object obj = cache.get(key, k -> createObject(key));
同步可设置缓存自动触发加载——LoadingCache
LoadingCache与Cache不同的是可以在build方法中预设置一个构建缓存方法,当get方法获取的key不存在时会触发预设置的方法进行缓存的自动构建。
LoadingCache<Key, Object> cache = Caffeine.newBuilder()
.maximumSize(10_000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(key -> createObject(key));
//查找缓存,如果缓存不存在则通过createObject生成缓存元素, 如果无法生成则返回null
Object obj = cache.get(key);
//批量查找keys集合中指定的key缓存,如果缓存不存在则生成缓存元素
Map<Object, Object> map = cache.getAll(keys);
异步需手动维护——AsyncCache
异步是指对缓存实例中元素的get,put等操作是异步的方式执行的。对缓存的put操作需要手动显示调用API去维护。
AsyncCache<Key, Object> cache = Caffeine.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES)
.maximumSize(1000)
.buildAsync();
//异步添加一个元素(一般直接使用get方法代替,因为是异步操作)
cache.put(key,createObjectAsync(key));
//从cache实例中获取key对应的缓存value 如果不存在key返回null
Object obj = cache.getIfPresent(key);
//查找缓存元素,如果不存在,则异步生成
CompletableFuture<Object> obj = cache.get(key, k -> createObjectAsync(key));
异步可设置缓存自动触发加载——AsyncLoadingCache
AsyncLoadingCache与AsyncCache都是异步,但是AsyncLoadingCache可以预设置缓存构建的方法,在get获取不到时自动触发构建方法构建缓存,无须手动显示调用put方法。
AsyncLoadingCache<Key, Object> cache = Caffeine.newBuilder()
.maximumSize(10_000)
.expireAfterWrite(10, TimeUnit.MINUTES)
// 可以设置为同步操作来生成缓存元素
.buildAsync(key -> createObject(key));
// 也可以设置构建一个异步缓存元素操作并返回一个future
.buildAsync((key, executor) -> createObjectAsync(key, executor));
// 查找缓存元素,如果其不存在,将会异步进行生成
CompletableFuture<Object> obj = cache.get(key);
// 批量查找缓存元素,如果其不存在,将会异步进行生成
CompletableFuture<Map<Object, Object>> graphs = cache.getAll(keys);
最后
以上就是坦率羊为你收集整理的Caffeine缓存的全部内容,希望文章能够帮你解决Caffeine缓存所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复