CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

SpringBoot配置Caffeine缓存示例-免费源码丞旭猿

昂贵的(CPU或I/O)绑定操作会降低系统的速度。缓存是提高系统性能的一种方法。在本文中,我们将演示如何使用Spring-Boot进行缓存。您可以使用caffeine作为spring框架缓存抽象之上的缓存提供者。

Maven依赖项

我们使用Maven来管理我们的项目依赖关系。首先,将以下依赖项添加到项目中。在本例中,我们使用com.github.ben-manes.caffee-caffee作为缓存提供程序。

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0modelVersion><groupId>com.memorynotfound.springboot.cachinggroupId><artifactId>caffeineartifactId><version>1.0.0-SNAPSHOTversion><url>https://memorynotfound.comurl><name><ahref="https://javakk.com/tag/spring-boot"title="查看更多关于 Spring Boot 的文章"target="_blank">Spring Boota>- ${project.artifactId}name><parent><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-parentartifactId><version>1.5.4.RELEASEversion>parent><dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-cacheartifactId>dependency><dependency><groupId>com.github.ben-manes.caffeinegroupId><artifactId>caffeineartifactId>dependency>dependencies><build><plugins><plugin><groupId>org.springframework.bootgroupId><artifactId>spring-boot-maven-pluginartifactId>plugin>plugins>build>project>

Caffeine缓存服务示例

为了演示spring框架的缓存,我们编写了一个简单的服务,它将根据条件缓存结果。让我们从定义接口开始。

packagecom.memorynotfound.springboot;publicinterfaceMusicService{Stringplay(finalString instrument);
}

以下服务使用@CacheConfig注释进行注释,并使用两个缓存目录和工具。play方法使用@Cacheable注释进行注释,并给定一个条件参数,这意味着当条件求值为true时,此方法的结果将在后续调用时被缓存。

packagecom.memorynotfound.springboot;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.cache.annotation.CacheConfig;importorg.springframework.cache.annotation.*;importorg.springframework.stereotype.Service;@Service@CacheConfig(cacheNames = {"directory","instruments"})publicclassMusicServiceImlimplementsMusicService{privatestatic Logger log = LoggerFactory.getLogger(MusicServiceIml.class);@Cacheable(condition ="instrument.equals(trombone)")publicString play(String instrument) {
        log.info("Executing: "+this.getClass().getSimpleName() +".play(\""+ instrument +"\");");return"paying "+ instrument +"!";
    }

}

配置 Caffeine 缓存

我们使用application.yml文件配置咖啡因。我们可以通过将逗号分隔的列表附加到spring.cache.cache-names配置属性来创建缓存目录。我们可以使用spring.cache.caffee.spec配置属性定义自定义规范。

CaffeineSpec支持以下配置属性:

  • initialCapacity=[integer]:设置内部哈希表的最小总大小。在构建时提供足够大的估计值,避免了以后需要昂贵的调整大小操作,但是不必要地将此值设置为高值会浪费内存。
  • maximumSize=[long]:指定缓存可能包含的最大条目数。请注意,缓存可能会在超过此限制之前逐出条目,或在逐出时临时超过阈值。此功能不能与maximumWeight一起使用。
  • maximumWeight=[long]:指定缓存可能包含的项的最大权重。请注意,缓存可能会在超过此限制之前逐出条目,或在逐出时临时超过阈值。此功能不能与maximumSize一起使用。
  • expireAfterAccess=[duration]:指定在创建条目后经过固定的持续时间后,应自动从缓存中删除每个条目。
  • expireAfterWrite=[duration]:指定在创建条目或最新替换其值后经过固定的持续时间后,应自动从缓存中删除每个条目。
  • refreshAfterWrite=[duration]:指定活动项在创建后经过一个固定的持续时间或其值的最近一次替换后,可以自动刷新。

持续时间由整数表示,后跟dhms中的一个,分别表示天、小时、分钟或秒。当前没有以毫秒、微秒或纳秒为单位请求过期的语法。

spring:cache:cache-names: instruments,directorycaffeine:
            spec: maximumSize=500, expireAfterAccess=30slogging:
  pattern:
    console:"%-5level - %msg%n"level:
    -error- com.memorynotfound=trace

等效的application.properties文件:

spring.cache.cache-names: instruments, directoryspring.cache.caffeine.spec: maximumSize=500, expireAfterAccess=30slogging.pattern.console=%-5level - %msg%nlogging.level.com.memorynotfound=tracelogging.level.=error

测试Caffeine缓存

为了演示我们的方法是否使用缓存,我们编写了一个简单的应用程序。play方法执行多次。

packagecom.memorynotfound.springboot;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.boot.CommandLineRunner;importorg.springframework.boot.SpringApplication;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cache.annotation.EnableCaching;@EnableCaching@SpringBootApplicationpublicclassApplicationimplementsCommandLineRunner{privatestatic Logger log = LoggerFactory.getLogger(Application.class);@AutowiredprivateMusicService musicService;publicstatic void main(String[] args) throws Exception {
        SpringApplication.run(Application.class,args);}@Overridepublicvoid run(String... args) throws Exception {
        log.info("Spring Boot Caffeine Caching Example Configuration");

        play("trombone");
        play("guitar");
        play("trombone");
        play("bass");
        play("trombone");
    }privatevoid play(String instrument){
        log.info("Calling: "+ MusicServiceIml.class.getSimpleName() +".play(\""+ instrument +"\");");
        musicService.play(instrument);
    }
}

控制台输出

上一个应用程序将以下输出打印到控制台。我们可以清楚地看到,MusicServiceIml.play(“trombone”);已缓存。

.   _________/\\ / ____ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ |_| _|| _ \/ _` |\ \ \ \
 \\/  ___)| |_)| || || || (_||  ) ) ) )
    |____| .__|_| |_|_||_\__, |// //
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.4.RELEASE)

INFO  - Spring Boot Caffeine Caching Example Configuration
INFO  - Calling: MusicServiceIml.play("trombone");
INFO  - Executing: MusicServiceIml.play("trombone");
INFO  - Calling: MusicServiceIml.play("guitar");
INFO  - Executing: MusicServiceIml.play("guitar");
INFO  - Calling: MusicServiceIml.play("trombone");
INFO  - Calling: MusicServiceIml.play("bass");
INFO  - Executing: MusicServiceIml.play("bass");
INFO  - Calling: MusicServiceIml.play("trombone");

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容