缓存

本文详细介绍了Guava缓存的基本使用方法及配置选项,包括如何设置缓存的大小、存活时间以及不同类型的清除策略等。此外,还展示了Guava Cache的主要接口方法,如获取、加载、添加和删除缓存项等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分布式缓存
redis
memcahe

本地(进程内的)缓存
enhance
guaua cache 不需要太多的配置文件

一般cache的基础功能
提供存放读取 容器大小有限设置清除策略
一般是线程安全 单例

  private static Cache<String, BaseResponseVo<CartVo>> CACHE_CART = CacheBuilder.newBuilder().maximumSize(10000).expireAfterWrite(1, TimeUnit.SECONDS).build();
    final static Cache<Integer, String> cache = CacheBuilder.newBuilder()  
            //设置cache的初始大小为10,要合理设置该值  
            .initialCapacity(10)  
            //设置并发数为5,即同一时间最多只能有5个线程往cache执行写入操作  
            .concurrencyLevel(5)  
            //设置cache中的数据在写入之后的存活时间为10秒  
            .expireAfterWrite(10, TimeUnit.SECONDS)  
            //构建cache实例  
            .build();  

GuavaCache的实现是基于ConcurrentHashMap的。

再看看cache提供的方法

    /** 
     * 该接口的实现被认为是线程安全的,即可在多线程中调用 
     * 通过被定义单例使用 
     */  
    public interface Cache<K, V> {  

      /** 
       * 通过key获取缓存中的value,若不存在直接返回null 
       */  
      V getIfPresent(Object key);  

      /** 
       * 通过key获取缓存中的value,若不存在就通过valueLoader来加载该value 
       * 整个过程为 "if cached, return; otherwise create, cache and return" 
       * 注意valueLoader要么返回非null值,要么抛出异常,绝对不能返回null 
       */  
      V get(K key, Callable<? extends V> valueLoader) throws ExecutionException;  

      /** 
       * 添加缓存,若key存在,就覆盖旧值 
       */  
      void put(K key, V value);  

      /** 
       * 删除该key关联的缓存 
       */  
      void invalidate(Object key);  

      /** 
       * 删除所有缓存 
       */  
      void invalidateAll();  

      /** 
       * 执行一些维护操作,包括清理缓存 
       */  
      void cleanUp();  
    }  

guauacache的几种清除策略
time eviction
expireAfterAccess(long, TimeUnit)
缓存项在创建后,在给定时间内没有被读/写访问,则清除。
expireAfterWrite(long, TimeUnit)
缓存项在创建后,在给定时间内没有被写访问(创建或覆盖),则清除。

sizebased evication
通过CacheBuilder.maximumSize(long)方法可以设置Cache的最大容量数,当缓存数量达到或接近该最大值时,Cache将清除掉那些最近最少使用的缓存。

基于权重的策略
你可以使用CacheBuilder.weigher(Weigher)指定一个权重函数,并且用CacheBuilder.maximumWeight(long)指定最大总重。

显示清除
(1)个别清除:Cache.invalidate(key)
(2)批量清除:Cache.invalidateAll(keys)
(3)清除所有缓存项:Cache.invalidateAll()

基于引用的清除
在构建Cache实例过程中,通过设置使用弱引用的键、或弱引用的值、或软引用的值,从而使JVM在GC时顺带实现缓存的清除,不过一般不轻易使用这个特性。
(1)CacheBuilder.weakKeys():使用弱引用存储键
(2)CacheBuilder.weakValues():使用弱引用存储值
(3)CacheBuilder.softValues():使用软引用存储值

cache延迟删除

guaguacache实现中没有启动任何线程 都是通过调用其他线程来完成。
面向本地轻量级缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值