# 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已经有前缀了,则不会再加前缀。