通过CacheBuilder.removalListener(RemovalListener),你可以声明一个监听器,以便缓存项被移除时做一些额外操作。缓存项被移除时,RemovalListener会获取移除通知RemovalNotification,其中包含移除原因RemovalCause、键和值。 举个例子: RemovalListener<String, String> myRemovalListener = notification -> { System.out.println(notifi...
如果需要移除监听器,请使用RemovalListeners.asynchronous(RemovalListener, Executor)方法来装饰 RemovalListener,这样可以以异步的方式运行。 3.6、数据清理时机 使用CacheBuilder 构建的缓存不会“自动”执行清理和逐出值,也不会在值过期后立即执行清理和逐出值,也不会执行任何类似操作。相反,它会在写入操作期间执行少量维护,...
Cache<Integer, Integer> cache1 = CacheBuilder.newBuilder().expireAfterWrite(2, TimeUnit.SECONDS) .removalListener(RemovalListeners.asynchronous(notification -> { System.out.println(notification.getCause()); System.out.println(notification.getKey() + " --> " + notification.getValue()); }, executor...
通过CacheBuilder.removalListener(RemovalListener),你可以声明一个监听器,以便缓存项被移除时做一些额外操作。缓存项被移除时,RemovalListener会获取移除通知[RemovalNotification],其中包含移除原因[RemovalCause]、键和值。 请注意,RemovalListener抛出的任何异常都会在记录到日志后被丢弃 警告:默认情况下,监听器方法是在移除缓存...
你可以为缓存指定一个删除监听器(RemovalListener),以在条目被移除时执行某些操作,通过CacheBuilder.removalListener(RemovalListener)方法指定删除监听器。RemovalListener会接收到一个RemovalNotification对象,其中包含了RemovalCause、键和值的信息。 需要注意的是,任何由 RemovalListener 抛出的异常都会被记录(使用 Logger 时)并被...
@Test public void testCache() throws ExecutionException, InterruptedException { CacheLoader cacheLoader = new CacheLoader<String, Animal>() { // 如果找不到元素,会调用这里 @Override public Animal load(String s) { return null; } }; LoadingCache<String, Animal> loadingCache = CacheBuilder.newBuilde...
监听器:CacheBuilder.removalListener(RemovalListener) 清理缓存时间:只有在获取数据时才或清理缓存LRU,使用者可以单起线程采用Cache.cleanUp()方法主动清理。 刷新:主动刷新方法LoadingCache.referesh(K) 信息统计:CacheBuilder.recordStats()开启Guava Cache的统计功能。Cache.stats()返回CacheStats对象。(其中包括命中率等相...
Guava CacheBuilder构建的缓存特性 通过CacheBuilder构建的Cache实例具有以下特性: 将数据写入缓存时是原子操作。 当缓存的数据达到最大规模时,会使用“最近最少使用(LRU)”算法来清除缓存数据。 每一条数据还可以基于时间回收,未使用时间超过一定时间后,数据会被回收。
3. 引用:CacheBuilder.weakKeys() CacheBuilder.weakValues() CacheBuilder.softValues() 4. 明确的删除:invalidate(key) invalidateAll(keys) invalidateAll() 5. 删除监听器:CacheBuilder.removalListener(RemovalListener) 4、缓存回收 一个残酷的现实是,我们几乎一定没有足够的内存缓存所有数据。你必须决定:什么时候某个...
private Cache<String,User>cache=CacheBuilder.newBuilder().expireAfterWrite(3,TimeUnit.SECONDS)//写入多久没更新自动过期,先删除,后load.removalListener(new RemovalListener<Object,Object>(){@Override public void onRemoval(RemovalNotification<Object,Object>notification){LOGGER.info("{} remove {}",LocalDateTime...