# goRedis **Repository Path**: black_luk/goRedis ## Basic Information - **Project Name**: goRedis - **Description**: 一个用Go语言重写的Redis单机数据库实现 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-03-24 - **Last Updated**: 2026-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # goRedis 一个用Go语言重写的Redis单机数据库实现,参考《Redis设计与实现》和[Redis 3.0源码注释版](https://github.com/huangzworks/redis-3.0-annotated),实现了Redis的大部分核心功能和命令。 ## 项目简介 项目实现了Redis的五种基本数据类型以及相关的操作命令。 ## 项目结构 ``` goRedis/ ├── client/ # 客户端实现 │ ├── client.go # 客户端核心逻辑 │ └── codec.go # 编解码器 ├── server/ # 服务端实现 │ ├── redis.go # 服务器主程序 │ ├── command.go # 命令定义和映射 │ ├── db.go # 数据库操作 │ ├── object.go # Redis对象系统 │ ├── dict.go # 字典实现 │ ├── list.go # 链表实现 │ ├── hash.go # 哈希表实现 │ ├── zset.go # 有序集合实现 │ ├── rdb.go # RDB持久化 │ ├── pubsub.go # 发布订阅 │ └── ... # 其他核心模块 └── README.md ``` ## 已实现的功能 ### 字符串(String)操作 - `GET` - 获取字符串值 - `SET` - 设置字符串值 - `SETNX` - 仅当键不存在时设置值 - `SETEX` - 设置值并指定过期时间(秒) - `PSETEX` - 设置值并指定过期时间(毫秒) - `STRLEN` - 获取字符串长度 - `GETRANGE` - 获取字符串子串 - `SETRANGE` - 设置字符串指定位置的值 - `APPEND` - 追加字符串 - `INCR` - 整数值递增1 - `INCRBY` - 整数值按指定数值递增 - `DECR` - 整数值递减1 - `DECRBY` - 整数值按指定数值递减 ### 哈希(Hash)操作 - `HSET` - 设置哈希字段值 - `HGET` - 获取哈希字段值 - `HKEYS` - 获取所有字段名 - `HVALS` - 获取所有字段值 - `HGETALL` - 获取所有字段和值 - `HLEN` - 获取字段数量 - `HDEL` - 删除哈希字段 ### 列表(List)操作 - `LPUSH` - 从左侧插入元素 - `RPUSH` - 从右侧插入元素 - `LPOP` - 从左侧弹出元素 - `RPOP` - 从右侧弹出元素 - `LRANGE` - 获取指定范围的元素 - `LLEN` - 获取列表长度 - `LINDEX` - 获取指定位置的元素 - `LSET` - 设置指定位置的元素值 - `LREM` - 删除指定元素 - `BLPOP` - 阻塞式左侧弹出 - `BRPOP` - 阻塞式右侧弹出 ### 有序集合(Sorted Set)操作 - `ZADD` - 添加成员 - `ZINCRBY` - 增加成员分数 - `ZCARD` - 获取成员数量 - `ZRANGE` - 按排名范围获取成员 - `ZREVRANGE` - 按排名范围逆序获取成员 - `ZRANGEBYSCORE` - 按分数范围获取成员 - `ZREVRANGEBYSCORE` - 按分数范围逆序获取成员 - `ZSCORE` - 获取成员分数 - `ZRANK` - 获取成员排名 - `ZREVRANK` - 获取成员逆序排名 - `ZREM` - 删除成员 - `ZREMRANGEBYSCORE` - 按分数范围删除成员 - `ZREMRANGEBYRANK` - 按排名范围删除成员 ### 集合(Set)操作 - `SADD` - 添加成员 - `SCARD` - 获取成员数量 - `SISMEMBER` - 判断成员是否存在 - `SMEMBERS` - 获取所有成员 - `SREM` - 删除成员 - `SPOP` - 随机弹出成员 - `SUNION` - 集合并集 - `SINTER` - 集合交集 - `SDIFF` - 集合差集 ### 通用操作 - `DEL` - 删除键 - `EXISTS` - 检查键是否存在 - `EXPIRE` - 设置键过期时间(秒) - `EXPIREAT` - 设置键过期时间戳 - `TTL` - 获取键剩余生存时间 ### 发布订阅 - `PUBLISH` - 发布消息 - `SUBSCRIBE` - 订阅频道 - `UNSUBSCRIBE` - 取消订阅 ### 持久化 - `SAVE` - 保存数据到RDB文件 - `RDBLOAD` - 从RDB文件加载数据 ## 技术特性 - **五种数据类型** - 支持String、Hash、List、Set、Sorted Set - **内存管理** - 实现了Redis的对象系统和内存管理 - **持久化** - 支持RDB格式的数据持久化 - **发布订阅** - 实现了pub/sub消息系统 - **过期机制** - 支持键的TTL和过期删除 - **阻塞操作** - 支持列表的阻塞弹出操作 ## 快速开始 ### 启动服务器 ```bash cd server go run *.go ``` ### 使用客户端 ```bash cd client go run *.go ``` ### 示例操作 与Redis一致 ## 参考资料 - 《Redis设计与实现》 - 黄健宏著 - [Redis 3.0 源码注释版](https://github.com/huangzworks/redis-3.0-annotated) ## 许可证 本项目仅供学习和研究使用。