# redis-tool
**Repository Path**: E_wsq/redis-tool
## Basic Information
- **Project Name**: redis-tool
- **Description**: 1、redis-sync :redis同步工具,支持全量同步、实时同步、断点续传
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2021-08-12
- **Last Updated**: 2021-08-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# redis-tool
#### 介绍
- redis-sync : redis同步工具,支持全量同步、实时同步、断点续传(暂未完全实现)
- double-cache-starter : 双级缓存,默认使用本地缓存Caffeine和远程缓存Redis,需要手动添加各自的配置。
- chtwm-redis-starter : redis工具
---
### double-cache-starter
#### 软件架构
实现了Spring中的CacheManager和Cache接口
#### 使用说明
1. 添加double-cache-starter依赖
```
com.chtwm
double-cache-starter
1.0.0-SNAPSHOT
```
2. 使用@EnableDoubleCache注解
```
@EnableDoubleCache
```
3. 配置Caffeine和Redis
```
#本地缓存配置
cache.caffeine.initialCapacity=100
cache.caffeine.maximumSize=10000
cache.caffeine.expireAfterAccess=36000
cache.caffeine.refreshAfterWrite=36000
#Redis配置
spring.redis.cluster.nodes=172.16.117.104:7001,\
172.16.117.162:7001,\
172.16.117.15:7001,\
172.16.117.15:7002,\
172.16.117.104:7002,\
172.16.117.162:7002
#读取远程缓存的超时时间,单位为s。如果远程缓存down掉了,会影响响应速度
spring.redis.timeout=10
#缓存消息Topic,默认为chtwm_double_cache
cache.topic=chtwm_double_cache
```
4. 其他
预留了添加缓存、清除缓存和清空缓存的功能。通过Redis的Pub/Sub功能实现。key不需要增加前缀。
```
> publish chtwm_double_cache 'put cacheName::cacheKey cacheVal'
> publish chtwm_double_cache 'evict cacheName::cacheKey'
> publish chtwm_double_cache 'clear'
```
#### 问题
1. 缓存的清除、清空使用了Redis的Pub/Sub功能,有一定的优化空间
2. 远程缓存没有降级机制,如果远程缓存down机,后台会抛出很多异常,请求远程缓存时也会有timeout等情况。
3. 受SpringCache的限制,删除时只删除内存缓存的cache,系统重启后内存缓存的cache被清空,Redis中的Cache不会被加载,这时删除功能不能删除redis中的缓存,只有通过再次访问,才能通过提供的命令删除。
4. 因为增加了系统前缀和redis缓存前缀的配置,导致本地缓存的key与远程key不一致。
```java
#注解
@Cacheable(name="hello@ALL#10000", id="XXXX")
#本地key
hello::XXXX
#远程key
sysPrefix_cachePrefix_hello::XXXX
```
5. 因RedisJSON序列化限制,实体必须实现seter方法和默认的无参构造函数。
6. location分为:ALL、LOCATION、REMOTE,不区分大小写,可以不填,默认为ALL,写错了也是ALL。
7. TTL默认为毫秒,只针对Redis过期,本地缓存只能设置全局过期时间。
### chtwm-redis-starter
#### 软件架构
1. 使用JSON作序列化,封装了StringRedisTemplate和RedissonClient。
2. StringRedisTemplate和RedissonClient都可以单独使用和配置
3. 使用Cglib生成代理类,拼接前缀。
#### 使用说明
1. 添加chtwm-redis-starter依赖
```
com.chtwm
chtwm-redis-starter
1.0.0-SNAPSHOT
```
2. 使用@EnableHtRedis注解
```
@EnableHtRedis
```
3. 配置Redis
```
#Redis配置
spring.redis.client-type=lettuce
spring.redis.cluster.nodes=172.16.117.104:7001,\
172.16.117.162:7001,\
172.16.117.15:7001,\
172.16.117.15:7002,\
172.16.117.104:7002,\
172.16.117.162:7002
#前缀
spring.redis.prefix=aab
```
4. 注入HtRedisService
```java
@Autowired
private HtRedisService htRedisService;
```
#### 问题
1. 涉及方法太多太杂,没有一次性全部实现,如有问题请及时反馈。
2. HtRedisService全部key都会被加上前缀,如果要自定义前缀,请直接注入StringRedisTemplate或者RedissonClient,并生成自定义key。
3. 如果key已经有前缀了,则不会再加前缀。