# nano-redis **Repository Path**: hhf002/nano-redis ## Basic Information - **Project Name**: nano-redis - **Description**: 一个轻量级的Java版Redis实现,提供了Redis的核心功能和完整的命令兼容性。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-26 - **Last Updated**: 2025-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # nano-redis 一个轻量级的Java版Redis实现,提供了Redis的核心功能和完整的命令兼容性(代码通过AI code agent生成)。 ![nano-redis.png](nano-redis.png) ## 项目概述 nano-redis是一个教育性质的Redis实现,旨在帮助开发者理解Redis的内部工作原理。它实现了Redis的所有主要数据类型和核心功能,包括持久化、事务、发布订阅和分布式锁等高级特性。 ## 核心功能 ### 1. 数据类型支持 - **字符串 (String)**: 基本的键值存储 - **哈希 (Hash)**: 字段-值对的映射 - **列表 (List)**: 有序的字符串列表 - **集合 (Set)**: 无序且唯一的字符串集合 - **有序集合 (Sorted Set)**: 按分数排序的字符串集合 ### 2. 命令兼容性 项目实现了与Redis完全兼容的命令集: #### 键操作 - `SET key value [NX] [PX milliseconds]` - 设置键值,支持分布式锁选项 - `GET key` - 获取键值 - `DEL key [key ...]` - 删除键 - `EXPIRE key seconds` - 设置过期时间 - `TTL key` - 获取剩余时间 - `EXISTS key [key ...]` - 检查键是否存在 #### 字符串操作 - `INCR key` - 自增 - `DECR key` - 自减 - `MSET key value [key value ...]` - 批量设置 - `MGET key [key ...]` - 批量获取 #### 列表操作 - `LPUSH key element [element ...]` - 左侧推入 - `RPUSH key element [element ...]` - 右侧推入 - `LPOP key` - 左侧弹出 - `RPOP key` - 右侧弹出 - `LRANGE key start stop` - 范围获取 - `BLPOP key timeout` - 阻塞弹出 #### 集合操作 - `SADD key member [member ...]` - 添加成员 - `SREM key member [member ...]` - 移除成员 - `SMEMBERS key` - 获取所有成员 - `SINTER key [key ...]` - 交集 - `SUNION key [key ...]` - 并集 #### 有序集合操作 - `ZADD key score member [score member ...]` - 添加成员 - `ZREM key member [member ...]` - 移除成员 - `ZRANGE key start stop` - 范围获取 - `ZREVRANK key member` - 逆序排名 - `ZINCRBY key increment member` - 增加分数 #### 哈希操作 - `HSET key field value` - 设置字段 - `HGET key field` - 获取字段 - `HMGET key field [field ...]` - 批量获取字段 - `HINCRBY key field increment` - 字段自增 - `HKEYS key` - 获取所有字段名 ### 3. 高级功能 #### 持久化机制 - **简化RDB**: 定期保存数据快照 - **命令日志**: 记录所有写操作到日志文件 - **数据恢复**: 启动时自动从持久化文件恢复数据 #### 事务支持 - `MULTI` - 开始事务 - `EXEC` - 执行事务 - `DISCARD` - 取消事务 - `WATCH key [key ...]` - 监视键 #### 发布订阅 - `PUBLISH channel message` - 发布消息 - `SUBSCRIBE channel [channel ...]` - 订阅频道 - `PSUBSCRIBE pattern [pattern ...]` - 模式订阅 - `UNSUBSCRIBE [channel ...]` - 取消订阅 - `PUNSUBSCRIBE [pattern ...]` - 取消模式订阅 #### 分布式锁 - 支持`SET key value NX PX ttl`实现分布式锁 - 基于Redis原生命令,与标准Redis锁机制完全兼容 ### 4. 服务器命令 - `PING` - 连接测试 - `ECHO message` - 回显消息 - `INFO` - 服务器信息 - `SAVE` - 手动保存数据 ## 项目架构 ### 核心组件 1. **RedisCore**: 数据存储核心,管理所有键值对和过期时间 2. **StringRedis**: 字符串数据类型实现 3. **ListRedis**: 列表数据类型实现 4. **HashRedis**: 哈希数据类型实现 5. **SetRedis**: 集合数据类型实现 6. **SortedSetRedis**: 有序集合数据类型实现 7. **CommandProcessor**: 命令解析和分发处理器 8. **PubSubRedis**: 发布订阅功能实现 9. **TransactionRedis**: 事务功能实现 10. **PersistenceManager**: 持久化管理器 ### 设计特点 - **模块化设计**: 每个数据类型都有独立的实现类 - **线程安全**: 使用ConcurrentHashMap和读写锁保证并发安全 - **命令兼容**: 与Redis原生命令保持100%兼容 - **扩展性**: 易于添加新的数据类型和命令 ## 快速开始 ### 运行要求 - Java 8或更高版本 - Maven 3.x ### 编译运行 ```bash # 编译项目 mvn clean compile # 运行JUnit测试 mvn test # 运行交互式服务器 java -cp "target/classes" org.hhf.App ``` ### 使用示例 ```bash nano-redis> SET mykey "Hello World" +OK nano-redis> GET mykey $11 Hello World nano-redis> SET lock:resource token123 NX PX 5000 +OK nano-redis> LPUSH mylist item1 item2 item3 :3 nano-redis> LRANGE mylist 0 -1 *3 $5 item3 $5 item2 $5 item1 nano-redis> SADD myset member1 member2 member3 :3 nano-redis> SMEMBERS myset *3 $7 member1 $7 member2 $7 member3 ``` ## 技术特性 ### 性能优化 - 使用ConcurrentHashMap提供高并发性能 - 读写锁机制减少锁竞争 - 惰性删除过期键减少内存占用 ### 数据安全 - 事务ACID特性保证 - WATCH机制实现乐观锁 - 持久化确保数据不丢失 ### 扩展性 - 插件化的数据类型架构 - 统一的命令处理框架 - 模块化的功能组件 ## 学习价值 这个项目非常适合: - 学习Redis内部实现原理 - 理解分布式系统中的锁机制 - 掌握事务和ACID特性 - 了解发布订阅模式 - 学习持久化技术 ## 项目结构 ``` src/main/java/org/hhf/ ├── command/ │ └── CommandProcessor.java # 命令处理器 ├── core/ │ ├── RedisCore.java # 核心数据存储 │ ├── StringRedis.java # 字符串类型 │ ├── ListRedis.java # 列表类型 │ ├── HashRedis.java # 哈希类型 │ ├── SetRedis.java # 集合类型 │ └── SortedSetRedis.java # 有序集合类型 ├── pubsub/ │ └── PubSubRedis.java # 发布订阅 ├── transaction/ │ └── TransactionRedis.java # 事务支持 ├── persistence/ │ └── PersistenceManager.java # 持久化管理 └── App.java # 主程序入口 src/test/java/org/hhf/test/ └── NanoRedisTest.java # JUnit功能测试 ``` ## 当前项目状态 目前项目主要实现了: + ✅ 核心数据结构(5种基本类型) + ✅ 基础命令兼容性 + ✅ 事务支持 + ✅ 发布订阅 + ✅ 简化的持久化 + ✅ 基础分布式锁(SET NX PX) 未实现的功能: + ❌ 网络服务器(目前只支持本地命令行) + ❌ Redis协议支持 + ❌ 完整的Redlock算法 + ❌ 集群和主从复制 ## 许可证 见LICENSE文件