当前位置: 首页 > wzjs >正文

织梦美女图片网站模板深圳网络络推广培训

织梦美女图片网站模板,深圳网络络推广培训,大气学校网站模板,顺丰优选网购商城Redisson Lettuce 在 Spring Boot 中的最佳实践方案,本文从推荐理由、配置维护、代码使用示例、代码验证、总结、问答、实施建议等方面详细阐述。 目录 1. 为什么推荐 Redisson Lettuce 共存? 2. 配置与维护建议 application.yml文件 redisson.ya…

 Redisson + Lettuce 在 Spring Boot 中的最佳实践方案,本文从推荐理由、配置维护、代码使用示例、代码验证、总结、问答、实施建议等方面详细阐述。

目录

1. 为什么推荐 Redisson + Lettuce 共存?

2. 配置与维护建议

application.yml文件

redisson.yaml

pom依赖 

3. 代码中使用示例

1. Lettuce 的使用方式(通过 Spring Data Redis)

2. Redisson 的使用方式(注入 RedissonClient) 

4. 验证 Lettuce 作为默认客户端

5. 总结对比

6. FAQ

7. 最终实施建议


1. 为什么推荐 Redisson + Lettuce 共存?
维度Lettuce 负责Redisson 负责共存优势
功能定位基础 KV 操作/Session 管理分布式锁/布隆过滤器/分布式集合避免功能重叠,各司其职
性能优化高并发读写(毫秒级响应)分布式场景下的原子操作Lettuce 处理高频基础操作,Redisson 专注复杂分布式逻辑
资源开销轻量级连接(单连接多路复用)分布式对象管理避免 Redisson 的 15MB+ 包体积影响基础操作性能
生态整合Spring Boot 默认集成分布式架构扩展即用 Spring Data Redis 标准 API,又享分布式能力
运维复杂度自动连接管理分布式状态维护隔离基础连接和分布式组件的故障域

典型场景

  • 用户会话管理(Lettuce) + 订单分布式锁(Redisson)

  • 商品缓存读取(Lettuce) + 秒杀库存扣减(Redisson 分布式原子操作)

  • 基础数据存储(Lettuce) + 实时推荐布隆过滤器(Redisson)


2. 配置与维护建议
application.yml文件

放在 src/main/resources/ 下

如果是application.properties文件,配置一样的,只是需要按照.properties文件格式进行排版

# application.yml
spring:data:redis:# Lettuce 基础配置 (Spring Boot 自动装配)host: redis-primaryport: 6379password: pass123lettuce:pool:max-active: 16   # 生产环境建议 16-64max-idle: 8min-idle: 4# Redisson 独立配置,单独创建一个yaml放在 src/main/resources/ 下 (不共享连接池,推荐用 yaml)redisson:config: classpath:redisson-config.yaml
redisson.yaml

放在 src/main/resources/ 下

# redisson-config.yaml (单独配置文件)
#单机节点配置样例
singleServerConfig:address: "redis://127.0.0.1:6379"password: "123456"database: 11timeout: 5000connectionPoolSize: 256 #单个 Redis 节点的最大连接数(默认值:64;提高此值可支持更高的并发请求,但不要超过 Redis 服务端限制)connectionMinimumIdleSize: 64 #单个 Redis 节点最小空闲连接数(默认值:24;忽略idleConnectionTimeout配置,一直保持活跃的连接数,通常设为 connectionPoolSize 的 1/4 左右)idleConnectionTimeout: 3000  #空闲连接超时时间(默认值:10000毫秒,连接在空闲多久后会被关闭并释放资源,太短会导致频繁创建/销毁连接;太长会占用更多内存)pingConnectionInterval: 2000  #心跳间隔时间(默认值:0-不发心跳,用于维持连接活跃,推荐设为比 Redis服务端空闲连接超时的时间略短)#集群配置样例
#clusterServersConfig:
#  nodeAddresses:
#    - "redis://192.168.0.1:6379"
#    - "redis://192.168.0.2:6379"
#    - "redis://192.168.0.3:6379"
#  password: "your-cluster-password"  # 如果有密码保护
#  database: 5                        # 默认为 0,集群模式下通常忽略该参数
#  timeout: 5000                     # 连接超时时间(毫秒)
#  connectionPoolSize: 256           # 每个节点的最大连接数
#  connectionMinimumIdleSize: 64     # 每个节点最小空闲连接数
#  idleConnectionTimeout: 3000       # 空闲连接超时时间(毫秒)
#  pingConnectionInterval: 2000      # 心跳间隔(毫秒),用于维持连接活跃
pom依赖 

排除掉jedis依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.7.4</version><exclusions><exclusion><groupId>redis.clients</groupId><artifactId>jedis</artifactId></exclusion></exclusions></dependency>

维护建议

  1. 连接隔离:Lettuce 连接业务Redis,Redisson 连接分布式专用Redis

  2. 监控分离

    • Lettuce:监控连接池利用率 (spring.data.redis.lettuce.pool.*)

    • Redisson:监控分布式对象状态 (RedissonClient.getNodesGroup().pingAll())

  3. 版本控制

    // build.gradle
    ext {lettuceVersion = '6.2.6.RELEASE'redissonVersion = '3.23.2'
    }
    dependencies {implementation "org.springframework.boot:spring-boot-starter-data-redis"implementation "org.redisson:redisson-spring-boot-starter:${redissonVersion}"// 排除潜在冲突configurations.all {exclude group: 'io.lettuce', module: 'lettuce-core' exclude group: 'org.redisson', module: 'redisson-spring-data-*'}
    }


3. 代码中使用示例
1. Lettuce 的使用方式(通过 Spring Data Redis)

注入 RedisTemplate 或 StringRedisTemplate 即可:

import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;@Service
public class CacheService {private final StringRedisTemplate redisTemplate;public CacheService(StringRedisTemplate redisTemplate) {this.redisTemplate = redisTemplate;}public void set(String key, String value) {redisTemplate.opsForValue().set(key, value);}public String get(String key) {return redisTemplate.opsForValue().get(key);}
}
2. Redisson 的使用方式(注入 RedissonClient) 
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
public class DistributedLockService {private final RedissonClient redissonClient;public DistributedLockService(RedissonClient redissonClient) {this.redissonClient = redissonClient;}public void acquireLock(String lockKey) {RLock lock = redissonClient.getLock(lockKey);boolean isLocked = false;try {isLocked = lock.tryLock(10, 30, TimeUnit.SECONDS);if (isLocked) {// 执行业务逻辑}} catch (InterruptedException e) {Thread.currentThread().interrupt();} finally {if (isLocked && lock.isHeldByCurrentThread()) {lock.unlock();}}}
}
// 基础操作使用 Lettuce (通过 Spring Data Redis)
@RestController
public class CacheController {@Autowiredprivate StringRedisTemplate redisTemplate; // 基于Lettuce@PostMapping("/user")public void saveUser(@RequestBody User user) {// 基础KV操作redisTemplate.opsForValue().set("user:"+user.getId(), objectMapper.writeValueAsString(user));// Session管理 (Spring Session自动使用Lettuce)redisTemplate.opsForHash().put("session:active", session.getId(), user.getId());}
}// 分布式功能使用 Redisson
@Service
public class OrderService {@Autowiredprivate RedissonClient redisson; // 独立注入public void processOrder(String orderId) {RLock lock = redisson.getLock("order_lock:" + orderId);try {lock.lock(10, TimeUnit.SECONDS); // 分布式锁RBloomFilter<String> bloomFilter = redisson.getBloomFilter("processed_orders");bloomFilter.tryInit(1000000L, 0.01); // 布隆过滤器if (!bloomFilter.contains(orderId)) {// 分布式集合操作RSet<String> processingSet = redisson.getSet("processing_orders");processingSet.add(orderId);// ...业务逻辑bloomFilter.add(orderId);}} finally {lock.unlock();}}
}

4. 验证 Lettuce 作为默认客户端
@SpringBootTest
public class ClientVerificationTest {@Autowiredprivate RedisConnectionFactory connectionFactory;@Testpublic void verifyLettuceClient() {// 验证1:检查连接工厂类型assertTrue(connectionFactory instanceof LettuceConnectionFactory);// 验证2:获取原生连接对象try (RedisConnection conn = connectionFactory.getConnection()) {LettuceConnection lettuceConn = (LettuceConnection) conn;System.out.println("Lettuce version: " + lettuceConn.getNativeConnection().getOptions().getVersion());}// 验证3:查看依赖树 (Gradle)// ./gradlew dependencies | grep lettuce// 应包含: io.lettuce:lettuce-core:6.x.x}
}
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
//验证是否使用的是 Lettuce 而非 Jedis
@Component
public class RedisClientChecker {private final RedisConnectionFactory redisConnectionFactory;public RedisClientChecker(RedisConnectionFactory redisConnectionFactory) {this.redisConnectionFactory = redisConnectionFactory;}@PostConstructpublic void checkClient() {String clientType = redisConnectionFactory.getClass().getName();if (clientType.contains("Lettuce")) {System.out.println("当前 Redis 客户端为 Lettuce");} else if (clientType.contains("Jedis")) {System.out.println("当前 Redis 客户端为 Jedis,请检查依赖排除");} else {System.out.println("当前 Redis 客户端未知:" + clientType);}}
}

 


5. 总结对比
对比维度纯 Lettuce 方案纯 Redisson 方案Lettuce+Redisson 组合方案
基础操作性能⭐⭐⭐ (10万+ QPS)⭐⭐ (6万 QPS)⭐⭐⭐ (Lettuce处理基础)
分布式能力❌ 需自行实现⭐⭐⭐ 开箱即用⭐⭐⭐ (Redisson负责)
资源开销⭐⭐⭐ (低内存/CPU)⭐ (15MB+ JAR/高内存)⭐⭐ (隔离关键组件)
配置复杂度⭐ (Spring Boot自动配置)⭐⭐ (需独立配置)⭐⭐ (双配置但清晰隔离)
架构扩展性⭐⭐ (需定制分布式逻辑)⭐⭐ (强分布式弱基础)⭐⭐⭐ (按需扩展)
推荐场景纯缓存/会话管理强分布式系统企业级应用最佳实践

6. FAQ

❓ 是否可以在 application.yml 中直接配置 Redisson?
可以,但不推荐。Redisson 的配置项较多,放在 redisson.yaml 更清晰。
❓ Redisson 会影响 Lettuce 的连接吗?
不会。只要它们使用的是不同的连接池和配置,互不影响。
❓ Redisson 和 Lettuce 是否会重复建立连接?
可能会,但这是可控的。你可以将 Redisson 配置为共享连接池,或者调整其连接池大小以适应系统负载。

❓ SpringBoot中使用Lettuce +Redisson 时,一般会把那个自动装配关闭,等使用时,在手动实例化比较好?

✅ 场景一:推荐默认启用自动装配(适用于大多数项目)
✔️ 推荐方式:
Lettuce:保持 Spring Boot 的自动装配(spring-boot-starter-data-redis)
Redisson:保持 redisson-spring-boot-starter 的自动装配
📌 原因:
自动装配简化开发:Spring Boot 自动完成配置、初始化、连接池管理等繁琐工作。
生产级配置支持良好:Spring Boot 和 Redisson Starter 都提供了丰富的配置项(YAML/Properties),可满足大部分场景。
资源统一管理:便于与 Spring 的生命周期、健康检查、监控集成。
✅ 适用场景:
普通业务系统
不需要多个 Redis 实例或复杂隔离的项目
开发效率优先于极致性能调优

✅ 场景二:建议手动实例化(高级用法)
⚠️ 当你有以下需求时,建议关闭自动装配:

需求是否建议手动实例化
使用多个 Redis 实例(如主从、跨集群)✅ 是
对 Redisson 或 Lettuce 的连接池进行细粒度控制(如动态扩缩容)✅ 是
需要自定义连接池参数、SSL、超时策略等✅ 是
需要与已有组件兼容(如旧版 SDK)✅ 是

1. 禁用 Redisson 自动装配(不使用 starter)

<!-- 改为使用 redisson-core 而非 redisson-spring-boot-starter -->
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.23.5</version>
</dependency>

 然后手动配置 RedissonClient:

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RedissonConfig {@Beanpublic RedissonClient redissonClient() {Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379").setConnectionPoolSize(64).setIdleConnectionTimeout(10000);return Redisson.create(config);}
}

 2. Lettuce 可继续使用自动装配
除非你需要多个 Redis 数据源,否则无需替换 Spring Data Redis 提供的 RedisTemplate。

7. 最终实施建议
  1. 组件边界

  2. 部署拓扑

    +------------------+     +-------------------+
    |  Spring Boot App |     |  Redis Cluster    |
    |                  |     |                   |
    |  +------------+  |     | +---------------+ |
    |  | Lettuce    |-----> | | Business Node | |
    |  +------------+  |     | +---------------+ |
    |                  |     |                   |
    |  +------------+  |     | +---------------+ |
    |  | Redisson   |-----> | | Distributed   | |
    |  +------------+  |     | |   Node        | |
    |                  |     | +---------------+ |
    +------------------+     +-------------------+
  3. 升级路径

    • 新项目:直接采用组合方案

    • 旧项目迁移:

组合方案核心价值:在享受 Spring 生态便捷性的同时,获得企业级分布式能力,且通过资源隔离保障基础服务性能稳定性。

http://www.dtcms.com/wzjs/182770.html

相关文章:

  • 商标注册名字查询系统搜索引擎优化方法与技巧
  • 在网站中调用在线客服石家庄seo优化公司
  • wordpress文章点赞seo网站内容优化
  • 列出网站目录推广渠道怎么写
  • 知名做网站公司有哪些b站推广网站入口
  • 网站项目建设流程图google关键词分析工具
  • 浙江做网站套餐外国搜索引擎登录入口
  • web网站开发源码下载seo 推广教程
  • 沈阳网站制作网页杭州seo俱乐部
  • 免费的logo网站电子商务营销方法
  • 去国外做非法网站吗汕头seo收费
  • 图书管理系统网站开发教程惠州seo排名收费
  • 网站建设 投标书企业建站要多少钱
  • 最新火车停运通知今天seo外包软件
  • 怎么建网站站点农村电商平台
  • 我的世界大橙子做皮肤的网站互联网创业项目
  • aspcms谷歌优化培训
  • 网站开发职业前景什么是百度竞价排名
  • 免费网站建站系统seo是指
  • 中介如何做网站收客优化什么
  • 在线做春节网站seo刷关键词排名免费
  • 网站备案 互联网信息查询seo关键词排名优化官网
  • 慈溪想做网站的公司站长之家alexa排名
  • 做销售网站多少钱网站seo工具
  • 中文域名的网站有哪些百度seo是什么意思
  • 湖南做网站 就问磐石网络专业长沙网站seo排名
  • 南京电商网站建设公司正规网站建设服务
  • 公司建一个网站多少费用二级域名注册
  • .net域名 可以做公司网站吗精准营销的概念
  • 开锁公司做网站工具大全