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

织梦高端大气网站模板宁波企业网站seo

织梦高端大气网站模板,宁波企业网站seo,如何通过做网站挣钱,网站建设质量保证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/430438.html

相关文章:

  • 莆田网站建设设计aso排名优化知识
  • 企业网站空间域名武汉大学人民医院怎么样
  • 淘宝上做网站排名靠谱吗公司推广文案
  • 个人网站可以做点什么泰州网站建设优化
  • 宁波公司建设网站上海热点新闻
  • html基本结构框架代码安卓手机优化神器
  • 效果图制作网站有哪些门户网站有哪些
  • 教育咨询佛山seo
  • 怎样编辑网页关键词优化需要从哪些方面开展
  • 辽宁pc网站建设开发排行榜软件
  • 莱芜论坛莱芜都市网北京网站优化对策
  • 独立站需要多少钱seo技术交流
  • 网站建设实施过程巩义网络推广外包
  • 私人做网站可靠吗北京做网站公司哪家好
  • 建站宝盒站群版搜索引擎的工作原理是什么
  • 上海多家商场调整营业时间快速网站排名优化
  • 做亚马逊产品测评的网站怎么制作网站教程手机
  • 青岛物联网app开发公司杭州网站seo
  • 网站日程建设表全网营销图片
  • 淮南网站开发广告策划公司
  • 旅游的网站网络营销策划方案ppt模板
  • 手机视频网站建设网站优化排名公司哪家好
  • wordpress建企业站教程企业网站建设论文
  • 外贸公司做网站该去哪里找数据分析培训
  • 织梦系统做的商城网站买卖链接网
  • 长沙手机模板建站现在有什么技能培训班
  • 襄阳微网站建设台州百度快照优化公司
  • 网站开发与维护课程设计网店运营是做什么的
  • 网站首页做跳转深圳百度首页优化
  • 上海袜网站建设全网营销式网站