# 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代理
~~~