# ra-cache **Repository Path**: zgr413/r-cache ## Basic Information - **Project Name**: ra-cache - **Description**: 基于 Spring AOP 的声明式和编程式缓存工具,支持RedisTemplate - **Primary Language**: Java - **License**: Not specified - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-16 - **Last Updated**: 2024-05-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, SpringBoot, Redis ## README

一种简单的,支持不同方案的缓存组件

## 简介 ra-cache是一个缓存组件,其提供了多种不同的支持以满足不同性能和环境的需求。 ## 特性 1. 简单易用,功能强大,扩展性强。 2. 支持redisTemplate。支持扩展。 ## 如何使用 1. 引入相关依赖。 ```xml com.ra.cache ra-cache-redis-spring-boot-starter ${latest.version} ``` 2. 根据底层需要配置redis。 ```yaml spring: redis: host: 127.0.0.1 port: 6379 password: # 密码(默认为空) timeout: 6000 # 连接超时时长(毫秒) database: 1 # 数据库 jedis: pool: max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) max-idle: 10 # 连接池中的最大空闲连接 min-idle: 5 # 连接池中的最小空闲连接 ``` 3. 在需要缓存的地方使用RCache注解。 ```java @Service public class UserService { @RaCache(keys = "#name") public UserDto getUserName(String name) { return new UserDto(); } //完全配置,支持spel @RaCache(name = "cache:demo:key", keys = {"#user.id", "#user.name"}, expire = 60000) public UserDto customMethod(UserDto user) { return user; } } ``` ## 后续开发 ##### 暂时还没考虑支持非springboot项目 ~~~ 1. 支持RaCachePut,说明:支持方法仅写入缓存的操作。 2. 支持RaCacheGet,说明:支持方法仅读取缓存的操作,将读取到的缓存数据写入当前线程供后续使用。 3. 支持扩展更多的缓存组件。(有好的意见也可以提) 4. 支持独立的redis数据源,优先读取独立配置(适用于业务与缓存使用的redis库独立管理的情况) 5. 支持延迟双删策略,具体参考demo:https://gitee.com/jike11231/redisDemo.git ~~~ ## 使用中遇到的问题 ~~~ 1. Spring AOP之同一个对象方法内部自调用导致事务失效问题,自调用失效 2. 解决方法见:https://blog.csdn.net/f45056231p/article/details/93748749 问题描述: 这个问题是自调用时脱离了Spring容器管理的所有对象,对于SpringAOP的注解都会失效,因为他们不是Spring容器的代理类,SpringAOP就切入不了 当然可以使用原生ASPECTJ,不用SpringAOP,但是基于生态链问题,还是尽量使用SpringAOP 这里简单说一下,Spring如何选择使用CGLIB,或者是JDK代理, 简单来说,如果实现了某个接口,那么Spring就选择JDK代理(不一定),如果没有,那么就选择CGLIB代理 ~~~