Redis 5设计与源码分析
上QQ阅读APP看书,第一时间看更新

1.4 Redis安装与调试

我们以Linux环境为例来进行安装。

通过网址http://download.redis.io/releases/可以获得各个版本的Redis源码,本书以Redis 5.0为例,下载源码包并编译安装(源码包URL为http://download.redis.io/releases/redis-5.0.0.tar.gz)。

    $ wget http://download.redis.io/releases/redis-5.0.0.tar.gz
    $ tar -zxvf redis-5.0.0.tar.gz
    $ cd redis-5.0.0
    $ make
    $ cd src
    $make install

到此,我们完成了Redis 5.0的编译安装,生成的可执行文件在/usr/local/bin目录中:

    redis-benchmark   redis-check-aof   redis-check-rdb   redis-cli
    redis-sentinel   redis-server

其中redis-benchmark是官方自带的Redis性能测试工具;当AOF文件或者RDB文件出现语法错误时,可以使用redis-check-aof或者redis-check-rdb修复;redis-cli是客户端命令行工具,可以通过命令redis-cli -h {host} -p {port}连接到指定Redis服务器;redis-sentinel是Redis哨兵启动程序;redis-server是Redis服务端启动程序。

例如,使用redis-server启动服务端程序(默认监听端口是6379):

    $ /usr/local/bin/redis-server

使用redis-cli连接Redis服务器并添加键值对:

    $ redis-cli -h 127.0.0.1-p 6379
    127.0.0.1:6379> set name zhangsan
    OK
    127.0.0.1:6379> get name
    "zhangsan"

GDB是一个由GNU开源组织发布的、UNIX/Linux操作系统下的、基于命令行的、功能强大的程序调试工具。下面我们演示如何通过GDB来调试Redis。

用GDB启动redis-server服务端程序:

    $ gdb /usr/local/bin/redis-server
    (gdb)

使用b命令在main函数入口增加断点:

    (gdb) b main
    Breakpoint 1 at 0x427770: file server.c, line 4000.

使用r命令运行:

    (gdb) r
    Starting program: /usr/local/bin/redis-server
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".

   Breakpoint 1, main (argc=1, argv=0x7fffffffe528) at server.c:4000
    4000         int main(int argc, char **argv)

从上面的输出中可以看到,代码执行到main函数停止。接下来,使用n命令执行下一步:

    (gdb) n
    4034              spt_init(argc, argv);

使用p命令查看某个变量的信息:

    (gdb) p argc
    $1 = 1

这里只是简要介绍使用GDB调试Redis程序的方法,更多GDB的使用技巧有待读者去研究。

当然,还可使用很多方便的源码阅读工具阅读代码。例如,Windows环境下有一款功能强大的IDE(集成开发环境)——Source Insight,内置C++代码分析功能;同时能自动维护项目内的符号数据库,非常方便。另外,Mac平台下功能强大的IDE(集成开发环境)—Understand具备代码依赖、图形化等实用功能。Linux环境下可以使用Vim + Ctags来阅读代码,其中Ctags是Vim下阅读代码的一个辅助工具,可以生成函数、类、结构体、宏等语法结构的索引文件,使用方法也非常简单。读者可以自行学习这些源码阅读工具的具体安装教程,这里不再赘述。