u2Cache 基于内存和Redis的两层自助式缓存框架

本文介绍了u2Cache,一个基于Springboot的两级缓存框架,支持本地Caffeine和远程Redis。它解决了本地缓存容量限制及网络开销问题,提供多种缓存策略和高级功能如事件驱动、预热和缓存续命。
摘要由CSDN通过智能技术生成

u2Cache 基于内存和Redis的两层自助式缓存框架

介绍

源码地址: u2Cache: 基于spring boot的两级缓存框架。支持本地与远程缓存的自助式组装。一级缓存为Caffeine,二级缓存为Redis。缓存策略支持一级缓存、二级缓存和两级并存模式。主要解决因独立缓存带来的网络开销,也防止因本地缓存过大而造成的服务负担。

基于spring boot的两级缓存框架。支持本地与远程缓存的自助式组装。一级缓存为Caffeine,二级缓存为Redis。缓存策略支持一级缓存、二级缓存和两级并存模式。 主要解决几种场景问题:

1、本地缓存速度快,但容纳空间小,无法让所有数据均存储于此

2、大量的缓存读取会导致二级缓存网络拥堵,流量阻塞,从而造成性能瓶颈;而一级缓存则可以降低对二级缓存的访问频率,从而提升读取效率

3、缓存适用于单机、集群等环境,对于单机环境仅使用以及缓存即可;对于集群环境则可以两者并用,从而降低服务宕机所造成的瞬时大并发量数据问题

4、解决基于目前spring boot注解式缓存无法解决单key过期时间问题

5、支持事件驱动机制,便于服务多层缓存嵌套下,无法清空更新的问题

6、支持缓存预热,启动时加载必要缓存信息,并进行预热处理

7、支持缓存续命,允许缓存根据key,定时自动续命,防止失效

框架说明

是基于注解式的两级缓存框架,通过注解实现声明式的方法缓存。分为两级缓存:一级缓存使用本地缓存(目前只支持Caffeine,后续可扩展),二级缓存使用集中式缓存(目前只支持Redis)。目前支持三种缓存策略: 

1、只使用一级缓存

2、只使用二级缓存

3、同时使用两级缓存

特性说明

1、支持基于注解直接配置

2、支持多级缓存自助配置:一级、二级或者两级并用

3、支持缓存单个KEY的超时设置

4、支持缓存一致性

5、支持缓存KEY的spEl表达式,自定义生成策略

6、支持缓存使用、命中率监控(已支持)

7、支持缓存中间件自定义替换(后续支持)

8、支持缓存自动刷新(已支持)

9、支持基于事件更新缓存(已支持)

10、支持缓存预热(已支持) 

11、支持jdk1.8及以上版本

语法解析

@U2Cacheable注解

@U2Cacheable作用于方法级别上

名称

默认值

说明

cacheNames

CacheType.LEVEL1TO2

缓存名称

key

空字符串

缓存key,支持SpEL表达式,提供默认生成策略

cacheType

CacheType.LEVEL1TO2

缓存策略,支持 CacheType.LEVEL1/CacheType.LEVEL2/CacheType.LEVEL1_TO_LEVEL2三种选择,分别代表本地缓存/远程缓存/两级缓存

expireTime

0

超时时间参数: 正数值,如果<=0则不限制超时,d/h/m/s 四种选择,代表天/时/分/秒

expireUnit

TimeUnit.MINUTES

时间单位,支持TimeUnit.DAYS/TimeUnit.HOURS/TimeUnit.MINUTES/TimeUnit.SECONDS

continueLife

false

缓存到期前进行重加载处理,不断进行缓存续命

preHeat

false

服务启动阶段进行缓存预热处理

listenEventName

""

缓存监听事件,可基于缓存监听事件同步清空缓存信息

@U2CacheEvict注解

U2CacheEvict作用于方法级别上

名称

默认值

说明

cacheNames

CacheType.LEVEL1TO2

缓存名称

key

空字符串

缓存key,支持SpEL表达式,提供默认生成策略

cacheType

CacheType.LEVEL1TO2

缓存策略,支持 CacheType.LEVEL1/CacheType.LEVEL2/CacheType.LEVEL1_TO_LEVEL2三种选择,分别代表本地缓存/远程缓存/两级缓存

listenEventName

""

缓存监听事件,可基于缓存监听事件同步清空缓存信息

@U2CachePut注解

U2CachePut作用于方法级别上

名称

默认值

说明

cacheNames

CacheType.LEVEL1TO2

缓存名称

key

空字符串

缓存key,支持SpEL表达式,提供默认生成策略

cacheType

CacheType.LEVEL1TO2

缓存策略,支持 CacheType.LEVEL1/CacheType.LEVEL2/CacheType.LEVEL1_TO_LEVEL2三种选择,分别代表本地缓存/远程缓存/两级缓存

expireTime

0

超时时间参数: 正数值,如果<=0则不限制超时,d/h/m/s 四种选择,代表天/时/分/秒

expireUnit

TimeUnit.MINUTES

超时时间单位,支持TimeUnit.DAYS/TimeUnit.HOURS/TimeUnit.MINUTES/TimeUnit.SECONDS

快速使用
  1. 导入maven

<dependency>

    <groupId>com.guanyu.j2cache</groupId>

    <artifactId>u2cache-core</artifactId>

    <version>xxxxx</version>

</dependency>

  1. 引入插件

@SpringBootApplication(scanBasePackages = {"com.guanyu.u2cache"}) //扫描目录

@EnableCaching

@EnableScheduling

@U2CacheBothUseble //引入插件

public class U2CacheApplication {

    public static void main(String[] args) {

        SpringApplication.run(U2CacheApplication.class, args);

    }

}

  1. 配置缓存

    如果引入二级缓存,则需要配置对应地址

redisson:

  ## redis模式:1-单机 2-集群 3-哨兵

  mode: 1

  ## 数据区域

  database: 3

  ## 地址,可根据逗号分隔,例如11.168.3.186:6379,11.168.3.186:6379

  addresses: 11.168.3.186:6379

  ##是否需要密码

  isNoPass: false

  ## 密码

  password: 123456

  ## 超时时间设置

  timeout: 5000

  ## 最小活跃数

  minIdle: 10

  ## 最大活跃数

  maxIdle: 10

#  ## 线程数

#  threads: 10

#  ## netty线程池数

#  nettyThreads: 10

  1. 标注使用

@U2Cacheable(cacheNames = {"localCache", "remoteCache"}, key = "'['+#ttt.name+#ttt.age+']'", cacheType = CacheType.LEVEL2CACHE, expireTime = 1)

public List<Teacher> findListsByInfoLevel2(Teacher ttt){

        log.info("进入二级缓存方法");

        List<Teacher> teachers=new ArrayList();

        Teacher teacher=new Teacher();

        teacher.setName("lili");

        teacher.setAge(16);

        teachers.add(teacher);

        return teachers;

        }

版本发布

版本号

日期

说明

v1.0

2023-11-15

初始化版本

v1.0.1

2023-11-18

解决二级缓存时间过期失效bug

v1.1

2023-11-19

新增缓存续命功能

v1.2

2023-11-25

新增缓存预热功能

v1.2.1

2023-11-26

新增主机唯一性锁、优化代码包分布

v1.3

2023-12-03

新增基于事件更新缓存机制

v1.3.1

2023-12-06

解决缓存同步时,二级缓存异常同步问题

v1.3.2

2023-12-10

支持缓存手动操作

v1.3.3

2023-12-13

支持缓存占用、热点key使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值