1 Star 0 Fork 5

threefish / new-jpa-redis-parent

加入 Gitee
与超过 1000 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README.md

金融级 SpringBoot 开源企业级JPA REDIS无缝整合精细化缓存应用

前言

本项目发展自2019年,内部版本已在线上大型项目生产环境中使用,经过严格测试,BUG极少,不超过1小时加完缓存扩展,现有的几种缓存方式都有demo,大家可以持续关注,有时间会不断更新,也希望大家积极参与共同开发。 大家有好的建议可以联系本人,一定采纳学习。

第一种方案:只做redis缓存,不保存Mysql数据库, 需加@EnableRedisRepositories注解

优点:配置极省,非常方便,功能强大,支持缓存加索引等

弊端:只能走Redis,不走Mysql,不适合我们通用的开发场景,只适用于以Redis做唯一数据保存的数据库场景
第二种方案:加注解方式  需加@EnableCaching注解

优点:配置较省,较为方便

弊端:虽然走Redis,也走Mysql,但开发中容易出错,缓存删除范围过大,缓存条数过多;加缓存工作量偏大;
第三种方案(推荐):

优点:走Redis,也走Mysql,配置超级省,最为方便,功能可以非常强大,定制化实现,灵活运用,精细化缓存,缓存条数最少,缓存删除范围最小,全动态数据变化的缓存变更,开发中第一层缓存和第二层缓存都支持,并支持事务。

弊端:目前大部分场景都已支持,当然事在人为,可以做到很全面,还可考量并发性能、排序方式、加索引的支持等等场景

QQ交流

  • 作者: 972153513

版本说明

  • 目前版本v3.0.RELEASE正式发布,已经可以使用

  • 相比v2.0.RELEASE 性能有巨大提升

  • 采用的技术也完全不同,主要使用到了lettuce、disruptor、reactor、rxjava、rxjava2、commons-pool2等

    说明:lettuce(高级Java Redis客户端,用于线程安全同步,异步和反应式使用。支持群集,Sentinel,流水线和编解码器。 https://lettuce.io)

  • 大型老项目加缓存顶多1小时全部搞完,完美收官

  • 支持Netty无阻塞处理极速模式

  • 支持Netty管道极速模式

  • 支持Netty异步极速模式

  • 支持客户端队列、异步线程池、同步线程池模式

  • 支持Netty客户端资源线程池模式

  • 支持退避重试5次模式

  • 支持编码SerializedObjectCodec

  • 支持金融级别缓存安全

  • 支持Redis故障,自动走数据库,不影响系统运行

版本计划

  • v4.0将实现:数据量巨大的单次保存,超大的部分做MQ解耦削峰处理,即开启管道模式
  • v5.0将实现:缓存一致性和跨服务器查询的数据异构解决方案canal

运行必备环境:

  • JDK 8 181 +
  • Maven 3.3.9 +
  • Jedis 2.90
  • MySql 5.7 + 或 MariaDB 10.2 +
  • SpringBoot 1.5.7.RELEASE + (可自己升级版本,下一个版本升级到SpringBoot 2.x,因为SpringBoot 2.x后已经抛弃Jedis,只能用Lettuce)

实现功能:

通用功能

  • Spring事务控制JPA和Lettuce事务原子性等
  • 支持缓存加载与查询排序
  • 支持Redis单机模式配置
  • 支持Redis哨兵模式配置
  • 支持Redis通用集群模式配置
  • 支持Redis 独立主从模式配置
  • 支持Redis AWS ElastiCache集群 模式配置
  • 支持SerializedObjectCodec 实现 RedisCodec<String, Object>模式
  • 支持CompressionCodec.CompressionType.GZIP空间超小占用压缩模式
  • 支持分布式锁执行命令行模式
  • 支持数据库主键自增模式
  • 支持分布式统一分发ID模式
  • 支持HikariCP连接池
  • 支持lombok方式
  • 支持FastJson

一层缓存实现(String)

  • Controller接口层缓存,无须考虑排序问题,缓存条数可能过多,顶层数据变化比较大,尤其分页和数据展现形式具多样性,但好在接口不多(完全实现)
  • 支持ProtoStuffRedisSerializer最快方式(完全实现)
  • 支持FstRedisSerializer极快方式(一般用来做大数据,完全实现)
  • 支持KryoRedisSerializer极快方式(官网推荐,类型安全,完全实现)
  • 支持FastJsonRedisSerializer较快方式(类型安全,完全实现)
  • 缓存时间默认4天,不能动态进行数据变化的缓存变更(完全实现)

二层缓存实现(Hash)

  • JPA 通用增删改查无缝缓存整合(BaseJpaRedisRepositoryImpl)(完全实现)
  • JPA 复杂SQL支持无缝缓存整合(BaseQueryDslJpaRepository)(完全实现)
  • JPA FindBy模式支持无缝缓存整合(SecurecyPostProcessor)(完全实现)
  • JPA @Query注解模式支持无缝缓存整合 (完全实现)
  • 支持JPA和Redis事务整合方式(完全实现)
  • 支持ProtoStuffRedisSerializer最快方式(完全实现)
  • 支持FstRedisSerializer极快方式(一般用来做大数据,完全实现)
  • 支持KryoRedisSerializer极快方式(官网推荐,类型安全,完全实现)
  • 支持FastJsonRedisSerializer较快方式(类型安全,完全实现)
  • 支持精细化缓存,缓存条数极少,缓存删除范围最小(完全实现)
  • 支持全动态数据变化的缓存变更(完全实现)
  • 支持同步批处理极速模式(完全实现)
  • 支持管道批处理极速模式(完全实现)推荐
  • 支持管道事务超速模式(完全实现)推荐
  • 支持管道事务乐观锁超速模式(完全实现)推荐
  • 支持Netty无阻塞处理极速模式(完全实现)
  • 支持Netty异步管道批处理极速模式(完全实现)
  • 支持Netty异步管道事务极速模式(完全实现)
  • 支持Netty异步管道事务乐观锁极速模式(完全实现)
  • 支持抛异常自动退避重试5次模式(完全实现)
  • 支持大数据批量命令超过请求队列数(默认20个)自动进行再处理模式(完全实现)

用法

非常简单,例如: CustomerRepository,只需要继承 BaseJpaRedisRepository<Customer, Long>

如下: CustomerRepository extends BaseJpaRedisRepository<Customer, Long>

建议: 需要进行缓存的数据抽离放到专用以表或实体来作为一个 Repository 缓存,方便缓存管理, 一般情况可以直接继承BaseJpaRedisRepository,不继承的Repository,缓存不生效。

性能: 批量1000个保存操作,按照当前配置耗时平均在530ms,第一次操作时候耗时会长一些,有些配置需要初始化

参考知识点以及注意点

注意点:https://www.jianshu.com/p/8dfbdd958b99 【聊聊lettuce的shareNativeConnection参数】

知识点:https://www.cnblogs.com/liyan492/p/9858548.html 【Redis的三个框架:Jedis,Redisson,Lettuce】

简介

金融级 SpringBoot 开源企业级JPA REDIS无缝整合精细化缓存应用 展开 收起
Java
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/threefish/new-jpa-redis-parent.git
git@gitee.com:threefish/new-jpa-redis-parent.git
threefish
new-jpa-redis-parent
new-jpa-redis-parent
master

搜索帮助

E71a60c3 8189591 Df7b7c6b 8189591