加入maven依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.1-jre</version>
</dependency>
CacheBuilder
在使用过程中最麻烦的是,对于已经过期的缓存数据,不会显式地立即删除,只会让你在查询的时候查不到。但是实际应用中需要有一种方案能够在删除的时候触发类似持久化的操作,通常使用RemovalListeners
。但是实验发现这个监听器不会自动生效,解决思路是对这个RemovalListeners
使用异步调用,即RemovalListeners.asynchronous
。并且重新开一个定时线程,如Executors.newSingleThreadExecutor()
,每一段时间就执行cache.cleanUp()
函数,这个函数能够触发RemovalListeners
里面的持久化操作,对所有过期的key生效。下面是cleanUp()
函数的触发机制验证。
代码举例:
import com.google.common.cache.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* Created by 。。。 on 2019/3/18 19:43
*/
public class CacheMap<K, V> {
private static final Logger log = LoggerFactory.getLogger(CacheMap.class);
private Cache<K, V> cache