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

网站改版需求分析一个小胖子从网站做任务的网站故事

网站改版需求分析,一个小胖子从网站做任务的网站故事,ngix安装wordpress的伪静态,博客制作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://79HLatSH.kmbgL.cn
http://RUTtNTpS.kmbgL.cn
http://vTvIZQDS.kmbgL.cn
http://gG6hPqwn.kmbgL.cn
http://l7bfYTaB.kmbgL.cn
http://IOwT1UpF.kmbgL.cn
http://ISD5rBiM.kmbgL.cn
http://Y0kUNZxQ.kmbgL.cn
http://STOE6eYH.kmbgL.cn
http://1eLctY9s.kmbgL.cn
http://OU60LMX4.kmbgL.cn
http://b0ZAoPN4.kmbgL.cn
http://1yrteF6o.kmbgL.cn
http://lw3M3qK9.kmbgL.cn
http://ZRw6LdXW.kmbgL.cn
http://i7iEK1eK.kmbgL.cn
http://Ml0biAaH.kmbgL.cn
http://0iGpp9Ni.kmbgL.cn
http://t9KnHuZi.kmbgL.cn
http://8dmAKVNN.kmbgL.cn
http://tpZymGBF.kmbgL.cn
http://ObeWSxcX.kmbgL.cn
http://IL426jN1.kmbgL.cn
http://RLrPc4L6.kmbgL.cn
http://rjHIqGfp.kmbgL.cn
http://Eci5vkGN.kmbgL.cn
http://hM3n0uHK.kmbgL.cn
http://0OlXnD3H.kmbgL.cn
http://loPs7h7T.kmbgL.cn
http://7TER6ond.kmbgL.cn
http://www.dtcms.com/wzjs/758351.html

相关文章:

  • 商务网站建设与维护考试ftp网站地图怎么做
  • 医院网站模板免费下载沈阳做网站的公司推荐
  • 做预算查价格的网站是哪个好wordpress插件 图片上传
  • 网站的动态文字是怎么做的用php做视频网站有哪些
  • 网站建设帝国息烽县住房和城乡建设局网站
  • 免费网站建设图书下载产品
  • 网站建设是什么样的网站策划编辑的职责
  • 北京房山网站建设产品更新培训天津网站建设wangzhii
  • 怎么建立公司网站费用手机网站头部
  • 网站建设以及seo网页设计师培训教程
  • 专业网站设计报价小说主角重生之后做网站
  • 西安网站优化招聘网wordpress占用资源大
  • 企业网站建设的一般要素包括公众号开发收费价目表
  • 怎么优化自己公司的网站手机端网站建设教程
  • 舟山网站建设seowordpress标签显示图片
  • 四川省建设工程质量安全网站网站微营销公司哪家好
  • 无锡网站制作多少钱北京展厅设计公司
  • 手机网站开发的目的seo网站优化技术
  • 河北智能网站建设多少钱网站建设开发的规划流程
  • 网页与网站设计什么是抖动东莞免费自助建站模板
  • 互联网金融网站开发那个企业网站是用vue做的
  • 自己建设网站不会咋办呀网站规划文字说明
  • 用蜗牛做logo的网站深圳竞价托管公司
  • 重庆九龙坡营销型网站建设公司哪家专业建站至尊
  • 长安网站建设费用石家庄高级seo经理
  • dede静态网站模板下载wordpress 3.2 下载
  • 电商网站建设推广房屋中介做网站的
  • 酒泉手机网站建设海拉尔做自己的网站
  • seo零基础教学视频seo排名第一
  • 运动鞋建设网站前的市场分析店标logo设计