这是一个基于spring cache改造轻量级自定义缓存组件,只对原生spring-cache
组件做了拓展,其中 $\color{#EE7600}{Redis}$ 只作为缓存场景,并不提供分布锁,延迟队列,工作队列等用途,没有其他奇技婬巧的东西。
这里输入代码
介绍一下提供的功能
目前集成了 $\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
除了原生的几个注解外,对于 $\color{#EE7600}{redisCacheManager}$ 提供了可以手动操作缓存的 Bean
软件架构说明
Spring Boot 2.x
版本 具体是 2.6.3
版本 但是2.x应该都能用,1.x版本可能会有不生效情况,具体没有测试过。spring-boot-starter-cache
,spring-boot-starter-redis
fastjson
apache-common
我没有发布到我的私仓,您可以发布到您自己的私仓
安装到本地仓库,作为测试使用:
mvn clean install
发布到远程maven仓库,上线发布:
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
2.在该组件的 $\color{#EE7600}{pom}$ 文件中添加
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://{您私服的地址}/repository/maven-releases/</url>
</repository>
</distributionManagement>
3.执行命令
mvn clean deploy
4.需要引入组件的项目 $\color{#EE7600}{pom}$ 文件中引用
<dependency>
<groupId>org.madcat</groupId>
<artifactId>spring-boot-starter-jcache</artifactId>
<version>1.0-RELEASE</version>
</dependency>
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<String, String> {
@Override
public String cacheName() {
return "nativeCaffeineCache";
}
@Override
public Cache<String, String> build() {
return Caffeine.newBuilder().build();
}
}
@Configuration
public class CaffeineConfig {
@Bean("whiteListCaffeineCache")
public JCaffeine<Object, Object> whiteListCache() {
Caffeine<Object, Object> caffeine = Caffeine.newBuilder().recordStats().maximumSize(500).expireAfterAccess(1, TimeUnit.HOURS);
return new JCaffeine<>("whiteListCaffeineCache", caffeine);
}
}
@Configuration
public class CaffeineConfig {
@Bean("whiteListCaffeineCache")
public JCaffeineSpel<Object, Object> whiteListCache() {
return new JCaffeineSpel <>("whiteListCaffeineCache", "maximumSize=500,expireAfterAccess=1");
}
}
$\color{red}{(注:使用注解时候你的注解vaule或者cacheManagers就得指定bean的名称,否则会自动创建一个原生的Caffine策略作为缓存策略,导致你达不到预期效果)}$
5.手动操作redis缓存,注入实现bean
@Autowired
private RedisCacheSupport redisCacheSupport
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型