# springboot32-redis-distributed-lock **Repository Path**: yyl2291/springboot32-redis-distributed-lock ## Basic Information - **Project Name**: springboot32-redis-distributed-lock - **Description**: Spring Boot 3.2 Redis 分布式锁项目 本项目演示了如何在 Spring Boot 3.2 应用程序中使用 Redis 实现分布式锁,基于 Redisson 框架提供了两种分布式锁方案:自动续期锁和 RedLock。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-06 - **Last Updated**: 2026-03-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: 分布式锁, Redis ## README # Spring Boot 3.2 Redis 分布式锁项目 本项目演示了如何在 Spring Boot 3.2 应用程序中使用 Redis 实现分布式锁,基于 Redisson 框架提供了两种分布式锁方案:自动续期锁和 RedLock。 ## 项目概述 该项目主要用于解决分布式环境下的并发问题,特别是在订单退款等关键业务场景中确保数据一致性。通过 Redis 分布式锁,可以防止多个线程同时处理同一个订单的退款操作,避免重复退款等问题。 ## 技术栈 - **Spring Boot 3.2** - **Redis** - 分布式锁存储 - **Redisson** - Redis 客户端框架,提供丰富的分布式锁实现 - **Java** - 开发语言 ## 项目结构 ``` src/main/java/com/example/springboot32redisdistributedlock/ ├── Springboot32RedisDistributedLockApplication.java # Spring Boot 启动类 ├── controller/ │ └── OrderController.java # 订单控制器 ├── service/ │ ├── OrderRefundService.java # 订单退款服务 │ ├── OrderService.java # 订单服务接口 │ ├── PaymentService.java # 支付服务接口 │ └── impl/ │ ├── OrderServiceImpl.java # 订单服务实现 │ └── PaymentServiceImpl.java # 支付服务实现 └── utils/ └── DistributedLockUtils.java # 分布式锁工具类 ``` ## 核心功能 ### 1. 分布式锁工具类 (DistributedLockUtils) 提供两种分布式锁实现: - **自动续期锁** (`executeWithAutoRenewal`): 使用 Redisson 的可重入锁,支持自动续期功能,防止锁在业务处理过程中过期。 - **RedLock** (`executeWithRedLock`): Redisson 实现的 RedLock 算法,提供更可靠的分布式锁机制。 ### 2. 订单退款服务 (OrderRefundService) 处理订单退款的核心服务,支持两种加锁方式: - `processExpiredOrder`: 使用自动续期锁处理过期订单 - `processExpiredOrderWithRedLock`: 使用 RedLock 处理过期订单 ### 3. REST API 接口 | 接口 | 方法 | 说明 | |------|------|------| | `/api/orders/refund/{orderId}` | GET | 使用自动续期锁处理退款 | | `/api/orders/refund/redlock/{orderId}` | GET | 使用 RedLock 处理退款 | ## 配置说明 ### application.properties 配置 Redis 连接信息: ```properties # Redis 配置 spring.data.redis.host=your-redis-host spring.data.redis.port=6379 spring.data.redis.password=your-password ``` ### redisson.yml Redisson 客户端配置文件,用于配置 Redis 连接池和其他高级选项。 ## 使用示例 ### 使用自动续期锁 ```java DistributedLockUtils.executeWithAutoRenewal( "order:refund:" + orderId, // 锁的 key 10, // 等待获取锁的时间(秒) 30, // 锁的租约时间(秒) () -> { // 需要在锁保护下执行的业务逻辑 orderRefundService.processExpiredOrder(orderId); } ); ``` ### 使用 RedLock ```java DistributedLockUtils.executeWithRedLock( "order:refund:" + orderId, // 锁的 key 10, // 等待获取锁的时间(秒) 30, // 锁的租约时间(秒) () -> { // 需要在锁保护下执行的业务逻辑 orderRefundService.processExpiredOrderWithRedLock(orderId); } ); ``` ## 运行测试 项目包含单元测试,位于 `src/test/java/` 目录下: ```bash # 运行测试 mvn test ``` 测试类 `DistributedLockTest` 包含以下测试用例: - `testAutoRenewalLock`: 测试自动续期锁功能 - `testRedLock`: 测试 RedLock 功能 ## 依赖项 (pom.xml 主要依赖) ```xml org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-redis org.redisson redisson-spring-boot-starter 3.24.3 org.springframework.boot spring-boot-starter-test test ``` ## 注意事项 1. 确保 Redis 服务正常运行 2. 根据实际环境修改 Redis 连接配置 3. 锁的 key 建议使用有意义的命名规范,如 `业务:资源:ID` 4. 根据业务需求合理设置锁的等待时间和租约时间 5. 自动续期锁适用于执行时间不确定的业务场景 6. RedLock 适用于对锁可靠性要求更高的场景 ## 许可证 本项目仅供学习参考使用。