# jcache-spring-boot-starter
**Repository Path**: jhsy18702624734/jcache-spring-boot-starter
## Basic Information
- **Project Name**: jcache-spring-boot-starter
- **Description**: 这是一个基于原生spring cache组件改造的自定义缓存组件
重新封装了原生的缓存注解,更加符合业务开发的习惯。
只做了对原生功能拓展没有修改原有的功能,符合软件设计的开闭原则
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 1
- **Created**: 2022-08-04
- **Last Updated**: 2025-05-20
## Categories & Tags
**Categories**: spring-boot-ext, cache-modules
**Tags**: Cache, Redis, Caffeine
## README
### **spring-boot-starter-jcache**
#### 介绍
这是一个基于spring cache改造轻量级自定义缓存组件,只对原生`spring-cache`组件做了拓展,其中 $\color{#EE7600}{Redis}$ 只作为缓存场景,并不提供分布锁,延迟队列,工作队列等用途,没有其他奇技婬巧的东西。
- 这里是列表文本 大部分项目使用缓存的场景策略基本是复合的,也就是说有的可能只需要本地内存作为缓存,有的场景却需要使用到redis作为分布缓存
原生 $\color{#EE7600}{spring-boot-starter-cache}$ 策略一旦定下来,项目只能使用单一缓存方案,除非自己做了复合缓存拓展
- 注解上使用的不便之处,比如当你集成了 $\color{#EE7600}{Redis}$ 作为缓存的时候使用
$\color{#EE7600}{@Cacheable}$,$\color{#EE7600}{@CachePut}$ 注解的保存缓存时候
无法指定缓存的过期时间,并且使用缓存管理名称指定 $\color{#EE7600}{cacheManagers}$ 的时候不是很优雅。我想直接使用枚举指明我想要 $\color{#EE7600}{Redis}$ 还是 $\color{#EE7600}{Caffeine}$。`这里输入代码`
介绍一下提供的功能
- 目前集成了 $\color{#EE7600}{concurrentMapCacheManager}$ , $\color{#EE7600}{caffeineCacheManager}$ 本地内存管理
还有一个作为测试用途 $\color{#EE7600}{noOpCacheManager}$,一个 $\color{#EE7600}{redisCacheManager}$ 分布式缓存管理,$\color{#EE7600}{caffeineCacheManager}$ 和 $\color{#EE7600}{redisCacheManager}$是最有代表性的缓存,$\color{#EE7600}{Redis}$ 不过多介绍了,关于Caffine高速缓存可以看看他们的github地址:
[https://github.com/ben-manes/caffeine](http://)
- 除了原生的几个注解外,对于 $\color{#EE7600}{redisCacheManager}$ 提供了可以手动操作缓存的 Bean
#### 软件架构
软件架构说明
1. 使用`Spring Boot 2.x` 版本 具体是 `2.6.3` 版本 但是2.x应该都能用,1.x版本可能会有不生效情况,具体没有测试过。
2. 原生的 `spring-boot-starter-cache`,`spring-boot-starter-redis`
3. `fastjson`
4. `apache-common`
#### 安装教程
我没有发布到我的私仓,您可以发布到您自己的私仓
安装到本地仓库,作为测试使用:
`mvn clean install`
发布到远程maven仓库,上线发布:
1. maven $\color{#EE7600}{setting.xml}$ 配置 私服的账号
```
nexus-snapshots
admin
admin123
```
2.在该组件的 $\color{#EE7600}{pom}$ 文件中添加
```
nexus-releases
http://{您私服的地址}/repository/maven-releases/
```
3.执行命令
`mvn clean deploy`
4.需要引入组件的项目 $\color{#EE7600}{pom}$ 文件中引用
```
org.madcat
spring-boot-starter-jcache
1.0-RELEASE
```
#### 使用说明
1.启用
启动类上加 $\color{#EE7600}{@JEnableCaching}$ 注解,启用功能。$\color{red}{(注:假如你的配置文件中使用了spring.cache相关配置,那么会直接使用原生配置和功能,该组件所有拓展的功能都将不启用,也就是说原生的配置有更高的优先级)}$
2.注解的使用
`@JCacheable(value = "jkdd:shop_auth", cacheType = CacheType.REDIS, key = "#shopId", expireTime = 3600, timeunit = TimeUnit.SECONDS)`
- value/cacheNames: 当你的缓存为redis 这个值的意义就是redis key的分类,生成key的时候会加上这个前缀,当然你可以通过代码来配置不使用这个作为前缀,这里存在的意义就是将缓存按照业务分类。当你的缓存类型为caffeine时候 这个值就是你注入到容器里面的Caffeine Bean的名称。
- cacheType:代表缓存类型,比如这里代表的是使用redis作为缓存
- expireTime:redis 过期时间
- timeunit:过期时间的单位,默认为秒
- 其它的注解功能和原生的 `@Cacheable` 一致,具体参考spring cache的使用文档
- 其它注解 `@JCachePut`,`@JCacheEvict`,`@JCaching` 和 `@JCacheable` 一致
3.redis的配置
reids 依赖原生的redis 的配置 ConnectionFactory,这里省略连接池的配置,jedis.lettuce都是实现这个接口的
```
spring.redis.database=1
spring.redis.host=127.0.0.1
spring.redis.password=123
spring.redis.port=6701
```
4.Caffine缓存注入的方式
- 实现 `JCaffeineCacheFactory `接口,参考 `NativeCaffeineCache` 这是一个没有任何策略的Caffine缓存
```
@Component
public class NativeCaffeineCache implements JCaffeineCacheFactory {
@Override
public String cacheName() {
return "nativeCaffeineCache";
}
@Override
public Cache build() {
return Caffeine.newBuilder().build();
}
}
```
- 定义配置Caffine配置类
```
@Configuration
public class CaffeineConfig {
@Bean("whiteListCaffeineCache")
public JCaffeine