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

SpringBoot使用Caffeine本地缓存-永久免费的源码丞旭猿

作者:超级小豆丁

来源:http://www.mydlq.club/article/56/

环境配置:

  • JDK 版本:1.8
  • Caffeine 版本:2.8.0
  • SpringBoot 版本:2.2.2.RELEASE

参考地址:

https://www.jianshu.com/p/c72fb0c787fchttps://www.cnblogs.com/rickiyang/p/11074158.html博文示例项目 Github 地址:https://github.com/my-dlq/blog-example/tree/master/springboot/springboot-caffeine-cache-example

一、本地缓存介绍

缓存在日常开发中启动至关重要的作用,由于是存储在内存中,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力。

之前介绍过 Redis 这种 NoSql 作为缓存组件,它能够很好的作为分布式缓存组件提供多个服务间的缓存,但是 Redis 这种还是需要网络开销,增加时耗。本地缓存是直接从本地内存中读取,没有网络开销,例如秒杀系统或者数据量小的缓存等,比远程缓存更合适。

二、缓存组件 Caffeine 介绍

按 Caffeine Github 文档描述,Caffeine 是基于 JAVA 8 的高性能缓存库。并且在 spring5 (springboot 2.x) 后,spring 官方放弃了 Guava,而使用了性能更优秀的 Caffeine 作为默认缓存组件。

1、Caffeine 性能

可以通过下图观测到,在下面缓存组件中 Caffeine 性能是其中最好的。

2、Caffeine 配置说明

注意:

  • weakValues 和 softValues 不可以同时使用。
  • maximumSize 和 maximumWeight 不可以同时使用。
  • expireAfterWrite 和 expireAfterAccess 同事存在时,以 expireAfterWrite 为准。

3、软引用与弱引用

  • 软引用:如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。
  • 弱引用:弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存
// 软引用Caffeine.newBuilder().softValues().build();// 弱引用Caffeine.newBuilder().weakKeys().weakValues().build();

三、SpringBoot 集成 Caffeine 两种方式

SpringBoot 有俩种使用 Caffeine 作为缓存的方式:

  • 方式一:直接引入 Caffeine 依赖,然后使用 Caffeine 方法实现缓存。
  • 方式二:引入 Caffeine 和 Spring Cache 依赖,使用 SpringCache 注解方法实现缓存。

下面将介绍下,这俩中集成方式都是如何实现的。

四、SpringBoot 集成 Caffeine 方式一

1、Maven 引入相关依赖

2、配置缓存配置类

@ConfigurationpublicclassCacheConfig{@BeanpublicCachecaffeineCache(){returnCaffeine.newBuilder()// 设置最后一次写入或访问后经过固定时间过期.expireAfterWrite(60, TimeUnit.SECONDS)// 初始的缓存空间大小.initialCapacity(100)// 缓存的最大条数.maximumSize(1000)
                .build();
    }

}

3、定义测试的实体对象

@Data@ToStringpublic class UserInfo {privateIntegerid;privateStringname;privateStringsex;privateIntegerage;
}

4、定义服务接口类和实现类

UserInfoService

UserInfoServiceImpl

5、测试的 Controller 类

importmydlq.club.example.entity.UserInfo;importmydlq.club.example.service.UserInfoService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;@RestController@RequestMappingpublicclassUserInfoController{@AutowiredprivateUserInfoService userInfoService;@GetMapping("/userInfo/{id}")publicObject getUserInfo(@PathVariableInteger id) {
        UserInfo userInfo = userInfoService.getByName(id);if(userInfo ==null) {return"没有该用户";
        }returnuserInfo;
    }@PostMapping("/userInfo")publicObject createUserInfo(@RequestBodyUserInfo userInfo) {
        userInfoService.addUserInfo(userInfo);return"SUCCESS";
    }@PutMapping("/userInfo")publicObject updateUserInfo(@RequestBodyUserInfo userInfo) {
        UserInfo newUserInfo = userInfoService.updateUserInfo(userInfo);if(newUserInfo ==null){return"不存在该用户";
        }returnnewUserInfo;
    }@DeleteMapping("/userInfo/{id}")publicObject deleteUserInfo(@PathVariableInteger id) {
        userInfoService.deleteById(id);return"SUCCESS";
    }

}

五、SpringBoot 集成 Caffeine 方式二

1、Maven 引入相关依赖

2、配置缓存配置类

@ConfigurationpublicclassCacheConfig{/**
     * 配置缓存管理器
     *
     *@return缓存管理器
     */@Bean("caffeineCacheManager")publicCacheManagercacheManager(){
        CaffeineCacheManager cacheManager =newCaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()// 设置最后一次写入或访问后经过固定时间过期.expireAfterAccess(60, TimeUnit.SECONDS)// 初始的缓存空间大小.initialCapacity(100)// 缓存的最大条数.maximumSize(1000));returncacheManager;
    }

}

3、定义测试的实体对象

@Data@ToStringpublic class UserInfo {privateIntegerid;privateStringname;privateStringsex;privateIntegerage;
}

4、定义服务接口类和实现类

服务接口

importmydlq.club.example.entity.UserInfo;publicinterfaceUserInfoService{/**
     * 增加用户信息
     *
     *@paramuserInfo 用户信息
     */voidaddUserInfo(UserInfo userInfo);/**
     * 获取用户信息
     *
     *@paramid 用户ID
     *@return用户信息
     */UserInfogetByName(Integer id);/**
     * 修改用户信息
     *
     *@paramuserInfo 用户信息
     *@return用户信息
     */UserInfoupdateUserInfo(UserInfo userInfo);/**
     * 删除用户信息
     *
     *@paramid 用户ID
     */voiddeleteById(Integer id);

}

服务实现类

5、测试的 Controller 类

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容