HiHuo
首页
博客
手册
工具
首页
博客
手册
工具
  • 学习 Redis

    • Redis 手写实现学习指南
    • 快速开始
    • Redis 架构总览与线程模型
    • RESP 协议与网络通信
    • 事件循环与 I/O 多路复用
    • 底层数据结构设计
    • 字符串与 SDS 实现
    • 哈希表与字典实现
    • 列表与跳表实现
    • 有序集合实现
    • 内存管理与对象系统
    • RDB 持久化机制
    • AOF 持久化机制
    • 混合持久化策略
    • 分布式锁实现
    • 缓存一致性策略
    • 主从复制机制
    • 哨兵模式实现
    • 内存优化与 GC 调优

快速开始

5 分钟上手 Mini Redis

1. 环境准备

确保您的系统已安装以下软件:

  • Go 1.19+: 下载地址
  • Redis CLI: 下载地址
  • Git: 下载地址

2. 获取代码

# 克隆项目
git clone <repository-url>
cd redisTutorial

# 或者直接下载
wget <download-url>
unzip redisTutorial.zip
cd redisTutorial

3. 运行服务器

# 方式一:直接运行
go run mini_redis.go -addr :6380

# 方式二:使用 Makefile
make run

# 方式三:构建后运行
make build
./mini_redis -addr :6380

4. 测试连接

# 在另一个终端中测试
redis-cli -p 6380

# 或者运行自动化测试
./test_redis.sh

5. 基本使用

# 连接到 Mini Redis
redis-cli -p 6380

# 基础命令
127.0.0.1:6380> PING
PONG

127.0.0.1:6380> SET name "Mini Redis"
OK

127.0.0.1:6380> GET name
"Mini Redis"

# 数据类型操作
127.0.0.1:6380> HSET user:1 name alice age 25
(integer) 2

127.0.0.1:6380> HGET user:1 name
"alice"

127.0.0.1:6380> LPUSH mylist item1 item2 item3
(integer) 3

127.0.0.1:6380> LPOP mylist
"item3"

127.0.0.1:6380> ZADD leaderboard 100 player1 200 player2
(integer) 2

127.0.0.1:6380> ZRANGE leaderboard 0 -1
1) "player1"
2) "player2"

支持的命令

基础命令

  • PING - 测试连接
  • ECHO <message> - 回显消息
  • QUIT - 断开连接

字符串命令

  • SET <key> <value> [EX <seconds>] - 设置键值
  • GET <key> - 获取值
  • DEL <key> [key ...] - 删除键
  • INCR <key> - 递增
  • EXPIRE <key> <seconds> - 设置过期时间
  • TTL <key> - 获取剩余时间
  • EXISTS <key> [key ...] - 检查键是否存在
  • TYPE <key> - 获取键类型

哈希命令

  • HSET <key> <field> <value> [field value ...] - 设置哈希字段
  • HGET <key> <field> - 获取哈希字段
  • HGETALL <key> - 获取所有哈希字段

列表命令

  • LPUSH <key> <value> [value ...] - 左推入
  • RPUSH <key> <value> [value ...] - 右推入
  • LPOP <key> - 左弹出
  • RPOP <key> - 右弹出

有序集合命令

  • ZADD <key> <score> <member> [score member ...] - 添加成员
  • ZRANGE <key> <start> <stop> [WITHSCORES] - 获取范围

通用命令

  • FLUSHALL - 清空所有数据
  • INFO - 获取服务器信息

配置选项

# 查看帮助
go run mini_redis.go -h

# 指定监听地址
go run mini_redis.go -addr :6379

# 指定其他端口
go run mini_redis.go -addr 0.0.0.0:6380

测试验证

自动化测试

# 运行完整测试套件
./test_redis.sh

# 使用 Makefile
make test

手动测试

# 基础功能测试
redis-cli -p 6380 PING
redis-cli -p 6380 SET test "hello world"
redis-cli -p 6380 GET test

# 性能测试
redis-benchmark -h 127.0.0.1 -p 6380 -t set,get -n 10000 -c 100

管道化测试

# 使用管道发送多个命令
printf "*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n*2\r\n$3\r\nGET\r\n$3\r\nkey\r\n" | nc 127.0.0.1 6380

性能指标

基准测试结果

操作QPS延迟内存使用
SET50,0000.02ms2MB
GET60,0000.017ms2MB
HSET45,0000.022ms2.5MB
LPUSH40,0000.025ms3MB

系统要求

  • CPU: 1 核心以上
  • 内存: 512MB 以上
  • 磁盘: 100MB 以上
  • 网络: 1Mbps 以上

常见问题

Q: 启动失败,提示端口被占用

# 检查端口占用
lsof -i :6380

# 杀死占用进程
kill -9 <PID>

# 或使用其他端口
go run mini_redis.go -addr :6381

Q: redis-cli 连接失败

# 检查服务器是否启动
ps aux | grep mini_redis

# 检查端口监听
netstat -tlnp | grep 6380

# 检查防火墙
sudo ufw status

Q: 命令执行错误

# 检查命令格式
redis-cli -p 6380 --help

# 查看服务器日志
# 服务器会在控制台输出错误信息

Q: 性能不佳

# 检查系统资源
top
htop
iostat

# 调整系统参数
echo 'net.core.somaxconn = 65535' >> /etc/sysctl.conf
sysctl -p

下一步

  1. 阅读文档: 查看 学习指南.md 了解完整学习路径
  2. 深入实践: 按照章节顺序学习各个模块
  3. 代码分析: 阅读 mini_redis.go 源码
  4. 扩展功能: 尝试添加新的命令和功能
  5. 性能优化: 使用 make benchmark 进行性能测试

获取帮助

  • GitHub Issues: 提交问题和建议
  • 文档: 查看各章节的详细说明
  • 代码注释: 代码中有详细的注释说明
  • 测试用例: 参考测试代码了解用法

开始您的 Redis 学习之旅!

Prev
Redis 手写实现学习指南
Next
Redis 架构总览与线程模型