Redis - Redis和Redisson有什么关系

Redisson是一款基于Redis的Java库,提供高效分布式服务和In-MemoryDataGrid,支持大内存、云计算环境和多种云服务。它简化Redis使用,强调业务逻辑分离。底层采用Netty,兼容高版本Redis和Java环境。

1、Redisson是什么


Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。

2、最大支持内存


每个Redis服务实例都能管理多达1TB的内存。

3、云支持


能够完美的在云计算环境里使用,并且支持

AWS ElastiCache主备版
AWS ElastiCache集群版
Azure Redis Cache
阿里云(Aliyun)的云数据库Redis版


4、Redisson 的结构


Redisson作为独立节点 可以用于独立执行其他节点发布到分布式执行服务 和 分布式调度任务服务 里的远程任务。


5、底层和版本支持


Redisson底层采用的是Netty 框架。支持Redis 2.8以上版本,支持Java1.6+以上版本

 

<think>嗯,我需要帮用户解决在SpringBoot项目中同时使用RedisTemplateRedisson客户端的问题。用户引用了四段资料,其中提到了依赖配置、客户端混用自动配置相关内容。用户的核心诉求是寻求同时使用两者的最佳实践冲突解决方案。结合引用内容来看,关键点似乎在于配置隔离资源优化。引用[2]展示了如何分别配置RedisTemplateRedisson,这点很重要。引用[3]提到redisson-spring-boot-starter会自动注册RedissonClient,这说明用户可能需要干预自动配置过程。引用[4]则指出SpringBoot2默认使用Lettuce驱动,而Redisson使用Netty框架,这意味着两者可能存在连接冲突。用户可能担心的是连接资源浪费配置重叠问题。实际开发中常见的情况是:开发者想用Redisson的分布式功能,同时保留SpringDataRedis的便捷操作。这确实需要特殊处理,否则容易造成双重连接池之类的资源浪费。最佳实践应该包括四个层面:首先是依赖管理,必须确认spring-boot-starter-data-redisredisson-spring-boot-starter的版本兼容性;其次是连接工厂共享,让RedisTemplate复用Redisson的连接池很重要;然后是明确的配置隔离,比如分库号或前缀区分;最后还要考虑序列化一致性。比较棘手的可能是连接共享的实现。根据引用[1][4],Lettuce本身支持共享连接,但Redisson需要特定配置才能让RedisTemplate使用其底层的Lettuce连接。这需要参考RedissonClient.getConfig().useSingleServer().getConnectionManager()这类方法来获取原始连接工厂。另外线程安全也值得注意。引用[4]提到Lettuce的API是线程安全的,但RedisTemplate默认不是线程安全的,这点在并发场景下需要特别处理。建议用户在@Bean配置里加上@Scope("prototype")。最后应该提醒用户,如果不需要高级功能,其实单独使用Redisson的RBucket等接口也能替代RedisTemplate的部分功能,这样可能更简洁。但考虑到用户明确要求混用,重点还是要放在资源复用避坑指南上。</think> 在Spring Boot项目中同时使用`RedisTemplate``RedissonClient`是可行的,但需注意以下**最佳实践冲突解决方案**: --- ### 一、核心最佳实践 #### 1. **依赖隔离与配置分离** ```java // RedisTemplate 独立配置(引用[2]扩展) @Bean("myRedisTemplate") public RedisTemplate<String, Object> redisTemplate( RedisConnectionFactory factory) { // 关键点:共享ConnectionFactory RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } // Redisson 独立配置(引用[3][4]) @Bean(destroyMethod = "shutdown") public RedissonClient redisson() { Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379"); return Redisson.create(config); } ``` **关键点**: - 两者**共用同一个`RedisConnectionFactory`**(如Lettuce),避免创建两套连接池(引用[4]) - 为`RedisTemplate`显式配置序列化器,防止与Redisson的序列化冲突 #### 2. **连接工厂复用**(解决资源浪费) ```yaml # application.yml (优化连接) spring: redis: lettuce: pool: max-active: 10 # 控制总连接数 ``` 通过限制Lettuce连接池大小(Redisson底层复用Lettuce),避免双重连接池导致的资源浪费(引用[4])。 --- ### 二、典型冲突与解决方案 #### 1. **序列化冲突** **问题**: Redisson默认使用`org.redisson.codec.JsonJacksonCodec`,而`RedisTemplate`可能用JDK序列化,混用时数据不可读。 **解决方案**: 统一使用Jackson序列化: ```java // Redisson配置 config.setCodec(new JsonJacksonCodec()); // RedisTemplate配置 template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); ``` #### 2. **事务管理冲突** **问题**: Spring事务管理器可能同时接管`RedisTemplate`Redisson操作,导致事务边界混乱。 **解决方案**: - **方案1**:禁用Redisson事务 ```java config.setTransactionMode(TransactionMode.OFF); ``` - **方案2**:分离使用场景 - `RedisTemplate`用于简单K-V操作 - Redisson用于分布式锁、集合等高级功能 #### 3. **自动配置冲突**(引用[3]) **问题**: `redisson-spring-boot-starter`会**自动注册**`RedissonClient``RedisConnectionFactory`,可能覆盖自定义配置。 **解决方案**: 排除默认Bean: ```java @SpringBootApplication(exclude = { RedissonAutoConfiguration.class // 手动接管配置 }) ``` --- ### 三、性能优化建议 1. **连接复用** ```java // 通过Redisson获取底层连接工厂 @Autowired RedissonClient redissonClient; @Bean public RedisConnectionFactory connectionFactory() { return ((RedissonSpringDataConnectionFactory) redissonClient.getConfig().getConnectionManager()).getConnectionFactory(); } ``` 直接使用Redisson的`ConnectionManager`,彻底避免双重连接池(需redisson-spring-data依赖)。 2. **线程模型隔离** - `RedisTemplate`:同步阻塞操作 - `RedissonClient`:异步/响应式操作(如`RFuture`) --- ### 四、使用场景建议 | **组件** | **推荐场景** | **慎用场景** | |------------------|----------------------------------|---------------------| | `RedisTemplate` | 简单CRUD、Spring Cache集成 | 分布式锁、流处理 | | `RedissonClient`| 分布式锁、BloomFilter、消息队列 | 简单字符串操作 | > **最佳实践总结**:配置共享连接池 → 统一序列化 → 按需隔离事务 → 差异化使用场景。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值