缓存

分布式缓存
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实现中没有启动任何线程 都是通过调用其他线程来完成。
面向本地轻量级缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis-Plus是一个Mybatis框架的增强插件,它提供了简单的配置和快速进行CRUD操作的功能。在Mybatis-Plus中,缓存级别分为一级缓存和二级缓存。 一级缓存是Mybatis框架默认开启的,它是指在同一个SqlSession中,如果执行相同的查询语句,那么Mybatis会将查询结果缓存起来,下次执行相同的查询语句时,直接从缓存中获取结果,而不会再次去数据库查询。一级缓存的作用范围是在同一个SqlSession中,当SqlSession被关闭后,缓存也会被清空。 二级缓存是全局缓存,也称为mapper级别的缓存,它可以在多个SqlSession之间共享缓存结果。二级缓存的默认机制是采用PerpetualCache和HashMap存储缓存结果,所以默认是本地缓存。不同之处在于二级缓存的存储作用域是Mapper(Namespace),可以供多个SqlSession共享。可以通过配置来启用二级缓存,并且可以自定义存储源,如Ehcache、Redis等。 总结来说,Mybatis-Plus提供了一级缓存和二级缓存两种缓存级别。一级缓存在同一个SqlSession中有效,而二级缓存在多个SqlSession之间共享。开发人员可以根据具体的需求选择是否启用缓存,并可以自定义缓存的存储源。 : MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存缓存可以极大地提升查询效率。 : Mybatis-Plus是一个Mybatis框架的增强插件,根据官方描述,MP只做增强不做改变。它提供了简单的配置和快速进行CRUD操作的功能,包括代码生成、分页、性能分析等。 : 二级缓存也称为全局缓存,是mapper级别的缓存。它可以在多个SqlSession之间共享缓存结果,存储作用域为Mapper(Namespace)。默认使用PerpetualCache和HashMap存储,可以自定义存储源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值