欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Springboot Caffeine本地缓存使用示例

程序员文章站 2022-04-22 23:37:32
caffeine是使用java8对guava缓存的重写版本性能有很大提升一 依赖 org.springframework.b...

caffeine是使用java8对guava缓存的重写版本性能有很大提升

一 依赖

<dependency>
      <groupid>org.springframework.boot</groupid>
      <artifactid>spring-boot-starter-cache</artifactid>
    </dependency>
    <!-- caffeine -->
    <dependency>
      <groupid>com.github.ben-manes.caffeine</groupid>
      <artifactid>caffeine</artifactid>
      <version>2.7.0</version>
    </dependency>

二 配置缓存,单独使用

只需要配置bean就可以了,然后进行数据读写,注意这里提供了很多强大的自定义配置,可以查看文档详细配置

//定义缓存,可直接使用
  @bean
  public loadingcache expirycache(){
    loadingcache<string, object> loadingcache = caffeine.newbuilder()
        .initialcapacity(100)
        .maximumsize(1000)
        //缓存写入/删除监控
        .writer(new cachewriter<object, object>() {
          @override
          public void write(object key, object value) { //此方法是同步阻塞的
            system.out.println("--缓存写入--:key=" + key + ", value=" + value);
          }
          @override
          public void delete(object key, object value, removalcause cause) { system.out.println("--缓存删除--:key=" + key); }
        })
        .expireafteraccess(1, timeunit.minutes) //过期时间
        .build((string key)->"刷新的数据"); //cacheload实现类,刷新时候调用
    loadingcache.put("name","侯征");
    return loadingcache;
  }

测试使用:

@autowired
  private loadingcache loadingcache;
  @getmapping("/get")
  public object getvalue(string key){
    return loadingcache.get(key);
  }
  @getmapping("/add")
  public void addvalue(string value){
    loadingcache.put(value,value);
  }
  @getmapping("/delete")
  public void deletevalue(string key){
    loadingcache.invalidate(key);
    loadingcache.invalidateall();//清楚所有
  }
  @getmapping("/refresh")
  public void refreshvalue(string key){
    //刷新时会根据build方法中中指定的cacheload重新加载
    loadingcache.refresh(key);
  }

三 配置cachemanager,和spring缓存注解一起使用

//配置cachemanager
  @bean(name = "caffeine")
  public cachemanager cachemanagerwithcaffeine() {
    caffeinecachemanager cachemanager = new caffeinecachemanager();
    caffeine caffeine = caffeine.newbuilder()
        //cache的初始容量值
        .initialcapacity(100)
        //maximumsize用来控制cache的最大缓存数量,maximumsize和maximumweight(最大权重)不可以同时使用,
        .maximumsize(1000)
        //最后一次写入或者访问后过久过期
        .expireafteraccess(500, timeunit.seconds)
        //创建或更新之后多久刷新,需要设置cacheloader
        .refreshafterwrite(10, timeunit.seconds);
    cachemanager.setcaffeine(caffeine);
    cachemanager.setcacheloader(cacheloader);
    cachemanager.setcachenames(names);//根据名字可以创建多个cache,但是多个cache使用相同的策略
    cachemanager.setallownullvalues(false);//是否允许值为空
    return cachemanager;
  }

配置 cacheload

/**
   * 必须要指定这个bean,refreshafterwrite配置属性才生效
   */
  @bean
  public cacheloader<object, object> cacheloader() {
    return new cacheloader<object, object>() {
      @override
      public object load(object key) throws exception { return null;}
      // 重写这个方法将oldvalue值返回回去,进而刷新缓存
      @override
      public object reload(object key, object oldvalue) throws exception {
        system.out.println("--refresh--:"+key);
        return oldvalue;
      }
    };
  }

其他就是在service中配置spring的几个缓存注解使用就行了,这里放一张截图,这些注解用法,网上很多:[/code]

Springboot Caffeine本地缓存使用示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。