2 Star 0 Fork 1

madcat / jcache-spring-boot-starter

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
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

  • 除了原生的几个注解外,对于 $\color{#EE7600}{redisCacheManager}$ 提供了可以手动操作缓存的 Bean

软件架构

软件架构说明

  1. 使用Spring Boot 2.x 版本 具体是 2.6.3 版本 但是2.x应该都能用,1.x版本可能会有不生效情况,具体没有测试过。
  2. 原生的 spring-boot-starter-cachespring-boot-starter-redis
  3. fastjson
  4. apache-common

安装教程

我没有发布到我的私仓,您可以发布到您自己的私仓

安装到本地仓库,作为测试使用:

mvn clean install

发布到远程maven仓库,上线发布:

  1. maven $\color{#EE7600}{setting.xml}$ 配置 私服的账号
<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();
    }

}
  • 定义配置Caffine配置类
@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);
    }
}
  • 定义配置Caffine配置类使用SPEL 表达式构造bean
@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. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. Gitee 官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/

空文件

简介

这是一个基于原生spring cache组件改造的自定义缓存组件 重新封装了原生的缓存注解,更加符合业务开发的习惯。 只做了对原生功能拓展没有修改原有的功能,符合软件设计的开闭原则 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/jhsy18702624734/jcache-spring-boot-starter.git
git@gitee.com:jhsy18702624734/jcache-spring-boot-starter.git
jhsy18702624734
jcache-spring-boot-starter
jcache-spring-boot-starter
master

搜索帮助