vlambda博客
学习文章列表

第一节 Redis前世今生

1、Redis产生背景

2、安装

2.1 找到官网下载链接

https://redis.io/download

第一节 Redis前世今生

2.2 在centos中使用wget下载

[root@npf01]#wget http://download.redis.io/releases/redis-5.0.8.tar.gz

-bash: wget: command not found

[root@npf01 resource]#

根据提示,当前wget命令未找到。所以我们需要先安装wget命令。

[root@npf01 resource]# yum install wget

接着安装下载 Redis 安装包。

第一节 Redis前世今生

2.3 解压 Redis 安装包

[root@npf01 resource]# tar -xvf redis-5.0.8.tar.gz

2.4 编译 & 安装 Redis

[root@npf01 resource]# cd redis-5.0.8

[root@npf01 redis-5.0.8]# pwd

/root/resource/redis-5.0.8

[root@npf01 redis-5.0.8]# make

cd src && make all

make[1]: Entering directory `/root/resource/redis-5.0.8/src'

   CC Makefile.dep

...........

   CC adlist.o

/bin/sh: cc: command not found

make[1]: *** [adlist.o] Error 127

make[1]: Leaving directory `/root/resource/redis-5.0.8/src'

make: *** [all] Error 2

[root@npf01 redis-5.0.8]#  

根据提示,cc 命令未找到。那么接下来我们安装 cc 命令。

[root@npf01 redis-5.0.8]# yum install gcc

然后再执行 make 命令,发现错误。

第一节 Redis前世今生

我们需要执行 make distclean 清楚我们第一次执行 make 命令遗留的残渣。

第一节 Redis前世今生

再次执行 make 命令。

[root@npf01 redis-5.0.8]# make

到这里,我们已经编译完成。其实到这里的时候,我们可以进入到 src 目录,可以看到可执行文件了,我们可以去执行,但是我们一般不会那么去干的。因为 src 目录下面还有源码,我们一般不会将源码和可执行文件放在一起的,可以接下来我们需要执行 install 命令,其实就是将 src 目录下面的可执行文件拷贝到一个我们想要的目录下面去的。根据 README.md 文档指示,我们需要执行如下命令。

第一节 Redis前世今生

执行命令 [root@npf01 redis-5.0.8]# make PREFIX=~/software/redis5 install

第一节 Redis前世今生

综上,其实我们已经安装好了 Redis,但是我们想在任何地方都可以快速的使用 Redis 的启动命令,这样的话,我们就需要配置环境变量。

[root@npf01 redis5]# vi /etc/profile

export REDIS_HOME=/root/software/redis5

PATH=$REDIS_HOME/bin:$PATH

export PATH

[root@npf01 redis5]# source /etc/profile

其实做了这么多,已经差不多了。但是我们使用 Redis 一般都是作为服务端,我们希望它可以作为守护程序自启动,那么接下来你应该这么做。

第一节 Redis前世今生

第一节 Redis前世今生

Redis 已经作为一个后台服务跑起来了。我们可以再通过其他命令去查看。

第一节 Redis前世今生

比如说我们要停止或者开启这个服务,可以使用如下命令:

第一节 Redis前世今生

3、研究 Redis 的线程模型

3.1 学会使用 strace 命令

现在我们停掉所有的 Redis 实例,然后使用 strace 命令去追踪启动后的 Redis 实例。

第一步:停掉 Redis 实例

第一节 Redis前世今生

第二步:在合适的位置建立一个合适的目录,例如:

第一节 Redis前世今生

第三步:运行如下命令:

[root@npf01 src]# pwd

/root/resource/redis-5.0.8/src

[root@npf01 src]# strace -ff -o /tmp/redisstrace/out ./redis-server

你将会看到:

第一节 Redis前世今生

第四步:我们在 straceredis目录下查看。

第一节 Redis前世今生

我们看到 Redis 进程号是 30577。进入 linux 的进程目录查看。

第一节 Redis前世今生

第五步:查看out.30577文件。

[root@npf01 redisstrace]# vi out.7618

查找 socket 函数。

第一节 Redis前世今生

socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP) = 6

setsockopt(6, SOL_IPV6, IPV6_V6ONLY, [1], 4) = 0

setsockopt(6, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0

bind(6, {sa_family=AF_INET6, sin6_port=htons(6379), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 28) = 0

listen(6, 511) = 0

3.2 查看操作系统内核函数

3.2.1 socket 函数

[root@npf01 ~]# man 2 socket

第一节 Redis前世今生

3.2.2 bind 函数

[root@npf01 ~]# man 2 bind

第一节 Redis前世今生

例子程序:

第一节 Redis前世今生

3.2.3 select 函数

[root@npf01 ~]# man 2 select

第一节 Redis前世今生

3.3 Redis为什么快

第一节 Redis前世今生