GuavaCache的数据删除

这里的数据删除分为被动删除和主动删除

被动删除

基于数据大小的删除
LoadingCache<String,Object> cache= CacheBuilder.newBuilder()
    /*
    加附加的功能
    */
    //最大个数
    .maximumSize(3)
    .build(new CacheLoader<String, Object>() {
    
        //读取数据源
        @Override
        public Object load(String key) throws Exception {
            return Constants.hm.get(key);
        }
    });
    
    //读取缓存中的1的数据 缓存有就读取 没有就返回null
    System.out.println(cache.getIfPresent("5"));
    //读取4 读源并回写缓存 淘汰一个(LRU+FIFO)
    get("4",cache);

规则:LRU+FIFO
访问次数一样少的情况下,FIFO

基于过期时间的删除

隔多长时间后没有被访问过的key被删除

//缓存中的数据 如果3秒内没有访问则删除
    .maximumSize(3).expireAfterAccess(3, TimeUnit.SECONDS)

    Thread.sleep(1000);
    //访问1 1被访问
    cache.getIfPresent("1");
    //歇了2.1秒
    Thread.sleep(2100);
    //最后缓存中会留下1
    System.out.println("==================================");
    display(cache);

写入多长时间后过期

//等同于expire ttl 缓存中对象的生命周期就是3秒
        .maximumSize(3).expireAfterWrite(3, TimeUnit.SECONDS)
        .build(new CacheLoader<String, Object>() {
    
        //读取数据源
        @Override
        public Object load(String key) throws Exception {
            return Constants.hm.get(key);
        }
    });
display(cache);
        Thread.sleep(1000);
        //访问1
        cache.getIfPresent("1");
        //歇了2.1秒
        Thread.sleep(2100);

        System.out.println("==================================");
        display(cache);
基于引用的删除

可以通过weakKeys和weakValues方法指定Cache只保存对缓存记录key和value的弱引用。这样当没有其他强引用指向key和value时,key和value对象就会被垃圾回收器回收。

LoadingCache<String,Object> cache = CacheBuilder.newBuilder()
        // 最大3个 值的弱引用
        .maximumSize(3).weakValues()
        .build();
        
Object value = new Object();
cache.put("1",value);
value = new Object();//原对象不再有强引用
//强制垃圾回收
System.gc();
System.out.println(cache.getIfPresent("1"));

主动删除

单独删除
//将key=1 删除
cache.invalidate("1");
批量删除
//将key=1和2的删除
cache.invalidateAll(Arrays.asList("1","2"));
清空所有数据
//清空缓存
cache.invalidateAll();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容