当前位置: 移动技术网 > IT编程>开发语言>Java > Springboot Caffeine本地缓存使用示例

Springboot Caffeine本地缓存使用示例

2020年11月16日  | 移动技术网IT编程  | 我要评论
caffeine是使用java8对guava缓存的重写版本性能有很大提升一 依赖<dependency> <groupid>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]

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网