使用expiredAferWriter
使用expiredAfterWrite + refreshAfterWrite
指定refreshAferWrite的时间小于expiredAfterWrite
必须使用LoadingCache
直接使用get获取缓存
使用expiredAfterWrite + refreshAfterWrite + ListenableFuture
1. 不管上面那种方式,缓存的加载和刷新都需要外部调用(get)才触发
2. 使用姿势二和三要注意缓存的刷新过期时间要设置的比加载过期时间短,否则体现不出优势
3. 如果当前请求缓存时间距离最后一次时间已经超过过期时间,则会调用加载(load)方法而非刷新(reload)方法来加载缓存,此时会回退到姿势一
4. 刷新缓存的同时也会刷新缓存下次过期的时间(在当前时间累加过期时间)
5. 具体逻辑参照**com.google.common.cache.LocalCache$Segment**。这里贴出一些关键逻辑供各位参考:
只有在value!=null的时候(既未达到过期时间时)才会调用refresh方法
注册了一个Listener来实现异步刷新