缓存概念用法理解

缓存的自动加载功能,有的缓存有自动加载功能,有的缓存没有自动加载功能

 

Guava的自动加载功能就是callable接口

从LoadingCache查询的正规方式是使用get(K)方法。这个方法要么返回已经缓存的值,要么使用CacheLoader向缓存原子地加载新值

 

缓存回收

显式清除

任何时候,你都可以显式地清除缓存项,而不是等到它被回收:

你可以声明一个监听器,以便缓存项被移除时做一些额外操作

 

清理什么时候发生?

使用CacheBuilder构建的缓存不会"自动"执行清理和回收工作,也不会在某个缓存项过期后马上清理,也没有诸如此类的清理机制。相反,它会在写操作时顺带做少量的维护工作,或者偶尔在读操作时做——如果写操作实在太少的话。

这样做的原因在于:如果要自动地持续清理缓存,就必须有一个线程,这个线程会和用户操作竞争共享锁。此外,某些环境下线程创建可能受限制,这样CacheBuilder就不可用了

 

 

刷新

刷新和回收不太一样。正如LoadingCache.refresh(K)所声明,刷新表示为键加载新值,这个过程可以是异步的。在刷新操作进行时,缓存仍然可以向其他线程返回旧值,而不像回收操作,读缓存的线程必须等待新值加载完成。

如果刷新过程抛出异常,缓存将保留旧值,而异常会在记录到日志后被丢弃[swallowed]。

 

 

统计

 

CacheBuilder.recordStats()用来开启Guava Cache的统计功能。统计打开后,Cache.stats()方法会返回CacheStats对象以提供如下统计信息:

 

 

 

 

 

posted @ 2017-10-19 20:01  跨境电商杂货铺  阅读(713)  评论(0编辑  收藏  举报