# SpringbootRedis **Repository Path**: joker_dj/springboot-redis ## Basic Information - **Project Name**: SpringbootRedis - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-01 - **Last Updated**: 2025-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Boot Redis 项目 ## 项目简介 这是一个基于 Spring Boot 3.5.5 和 Redis 的集成项目,提供了丰富的 Redis 操作工具类和分布式锁功能。项目包含了常用的 Redis 数据操作方法和基于 Redis 的分布式锁实现。 ## 功能特性 - ✅ **Redis 配置管理** - 自动配置 RedisTemplate - ✅ **Redis 工具类** - 提供丰富的 Redis 操作方法 - ✅ **分布式锁** - 基于 Redis 的分布式锁实现 - ✅ **多种数据类型支持** - 字符串、哈希、列表、集合、有序集合 - ✅ **布隆过滤器** - 基于位图的简单布隆过滤器实现 - ✅ **重试机制** - 分布式锁支持重试获取 ## 项目结构 ``` src/main/java/com/springboot/ ├── SpringbootRedisApplication.java # Spring Boot 主应用类 ├── config/ │ └── RedisConfig.java # Redis 配置类 └── utils/ ├── RedisUtils.java # Redis 工具类 └── RedisDistributedLock.java # Redis 分布式锁工具类 ``` ## 快速开始 ### 环境要求 - JDK 21+ - Maven 3.6+ - Redis 5.0+ ### 安装依赖 ```bash mvn clean install ``` ### 配置 Redis 在 `application.yml` 中配置 Redis 连接信息: ```yaml spring: data: redis: database: 0 host: localhost port: 6379 password: 123456 ``` ### 运行项目 ```bash mvn spring-boot:run ``` ## 核心功能说明 ### 1. Redis 配置 (RedisConfig) 配置了 RedisTemplate 的序列化方式,使用 StringRedisSerializer 进行 key 和 value 的序列化。 ### 2. Redis 工具类 (RedisUtils) 提供了丰富的 Redis 操作方法: #### 基本操作 - `set(key, value)` - 设置缓存值 - `get(key)` - 获取缓存值 - `remove(key)` - 删除缓存 - `exists(key)` - 判断键是否存在 #### 位图操作 - `setBit(key, offset, value)` - 设置位图值 - `getBit(key, offset)` - 获取位图值 #### 哈希操作 - `hmSet(key, hashKey, value)` - 设置哈希值 - `hmGet(key, hashKey)` - 获取哈希值 #### 列表操作 - `lPush(key, value)` - 向列表右侧添加元素 - `lRange(key, start, end)` - 获取列表范围元素 #### 集合操作 - `add(key, value)` - 向集合添加元素 - `setMembers(key)` - 获取集合所有成员 #### 有序集合操作 - `zAdd(key, value, score)` - 向有序集合添加元素 - `zRank(key, value)` - 获取元素排名 - `rangeByScore(key, min, max)` - 根据分数范围获取元素 #### 布隆过滤器 - `saveDataToRedis(name)` - 保存数据到布隆过滤器 - `getDataToRedis(name)` - 检查数据是否存在于布隆过滤器 ### 3. 分布式锁 (RedisDistributedLock) 提供了基于 Redis 的分布式锁功能: #### 主要方法 - `lock(key, value, retryTimes)` - 获取分布式锁(带重试) - `lockKey(key, value)` - 获取分布式锁(原子操作) - `releaseLock(key, value)` - 释放分布式锁 - `isLock(key, value)` - 检查是否被锁定 #### 特性 - **原子性操作** - 使用 Redis 的 SETNX 命令保证原子性 - **自动过期** - 锁自动设置过期时间,防止死锁 - **重试机制** - 支持获取锁失败后的重试 - **Lua 脚本** - 使用 Lua 脚本保证释放锁的原子性 ## 使用示例 ### Redis 基本操作 ```java @Autowired private RedisUtils redisUtils; // 设置缓存 redisUtils.set("user:1", "John Doe"); redisUtils.set("user:1", "John Doe", 3600L); // 带过期时间 // 获取缓存 String user = (String) redisUtils.get("user:1"); // 删除缓存 redisUtils.remove("user:1"); ``` ### 分布式锁使用 ```java @Autowired private RedisDistributedLock redisDistributedLock; // 获取锁 boolean locked = redisDistributedLock.lock("order:lock:123", "request123", 3); if (locked) { try { // 执行业务逻辑 // ... } finally { // 释放锁 redisDistributedLock.releaseLock("order:lock:123", "request123"); } } ``` ## 配置说明 ### Redis 连接配置 | 配置项 | 说明 | 默认值 | |--------|------|--------| | spring.data.redis.host | Redis 服务器地址 | localhost | | spring.data.redis.port | Redis 服务器端口 | 6379 | | spring.data.redis.password | Redis 密码 | 123456 | | spring.data.redis.database | Redis 数据库索引 | 0 | ### 分布式锁配置 | 配置项 | 说明 | 默认值 | |--------|------|--------| | TIMEOUT_MILLIS | 锁的超时时间(毫秒) | 60000 | | RETRY_TIMES | 获取锁的重试次数 | 10 | | SLEEP_MILLIS | 重试间隔时间(毫秒) | 500 | ## 注意事项 1. **序列化方式**:项目使用 StringRedisSerializer,所有 key 和 value 都必须是字符串类型 2. **分布式锁**:确保每个锁都有唯一的标识值,避免误释放其他请求的锁 3. **布隆过滤器**:当前实现是简单的位图布隆过滤器,适用于小规模数据 4. **异常处理**:所有 Redis 操作都包含异常处理,但建议在业务层进行适当的异常处理 ## 开发建议 1. 根据业务需求调整 Redis 连接池配置 2. 对于大规模数据,考虑使用专业的布隆过滤器实现 3. 分布式锁的超时时间应根据业务执行时间合理设置 4. 建议对 Redis 操作进行监控和日志记录 ## 许可证 MIT License