Linux中安装Redis

`Redis`能够兼容绝大部分的`POSIX`系统,例如`Linux`、`OS X`、`OpenBSD`、`NetBSD`和`FreeBSD`,

其中比较典型的是`Linux`操作系统(例如`CentOS`、`Redhat`、`Ubuntu`、`Debian`、`OS X`等)。

在`Linux`安装软件通常有两种方法,第一种是通过各个操作系统的软件管理软件进行安装,例如`CentOS`有`yum`

管理工具,`Ubuntu`有`apt`。但是由于`Redis`的更新速度相对较快,而这些管理工具不一定能更新到最新版本,

同时前面提到`Redis`的安装本身不是很复杂,**所以一般推荐使用第二种方式:源码的方式进行安装**,整个安装

只需以下六步即可完成。

```shell
$ curl -O http://download.redis.io/releases/redis-3.2.11.tar.gz             #1
$ tar xzvf redis-3.2.11.tar.gz                                              #2
ln -s redis-3.2.11/ redis                                                   #3
$ cd redis                                                                  #4
$ make                                                                      #5
$ make install

 

+ 下载`Redis`指定版本的源码压缩包到当前目录。
+ 解压缩`Redis`源码压缩包。
+ 建立一个`redis`目录的软连接,指向`redis-3.2.11`。
+ 进入`redis`目录。
+ 编译(编译之前确保操作系统已经安装`gcc`)。
+ 安装。

这里有两点要注意:

第一,第`3`步中 **建立了一个`redis`目录的软链接,这样做是为了不把`redis`目录固定在指定版本上,有利于`Redis`未来版本升级,算是安装软件的一种好习惯**。

第二,第`6`步中的安装是将`Redis`的相关运行文件放到

**`usr/local/bin/`**下,这样就可以在任意目录下执行`Redis`的命令。例如安装后,可以在任何目录执行`redis-cli -v`

查看`redis`的版本:

$ redis-cli -v
redis-cli 3.2.11

 

### 配置、启动、操作、关闭Redis

**`Redis`安装之后,`src`和`/usr/local/bin`目录下多了几个以`redis`开头可执行文件,我们称之为`Redis shell`**,

这些可执行文件可以做很多事情,例如可以启动和停止`Redis`、可以检测和修复`Redis`的持久化文件,还可以检测`Redis`的性能。

| 可执行文件 | 作用 |

|:----------|:----|
| **redis-server** | **启动Redis** |
| **redis-cli** | **Redis命令行客户端** |
| **redis-benchmark** | **Redis基准测试工具** |
| **redis-check-aof** | **Redis AOF持久化文件检测和修复工具** |
| **redis-check-dump** | **Redis RDB持久化文件检测和修复工具** |
| **redis-sentinel** | **启动Redis Sentinel** |

本节只对`redis-server`、`redis-cli`进行介绍。

#### 启动Redis

**有三种方法启动Redis:默认配置、运行配置、配置文件启动**。

##### 默认配置

这种方法会 **使用`Redis`的默认配置来启动**,下面就是`redis-server`执行后输出的相关日志:

```shell

```shell
$ redis-server

```
```
4398:M 17 Oct 13:45:59.549 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.11 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 4398
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

4398:M 17 Oct 13:45:59.567 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
4398:M 17 Oct 13:45:59.567 # Server started, Redis version 3.2.11
4398:M 17 Oct 13:45:59.567 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
4398:M 17 Oct 13:45:59.568 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
4398:M 17 Oct 13:45:59.568 * The server is now ready to accept connections on port 6379

 

可以看到直接使用`redis-server`启动`Redis`后,会打印出一些日志,通过日志可以看到一些信息,上例中可以看到:

+ 当前的`Redis`版本是`3.2.11`

+ `Redis`的默认端口是`6379`

+ **`Redis`建议要使用配置文件来启动**。

**因为直接启动无法自定义配置,所以这种方法是不会在生产环境中使用的**。

##### 运行启动

**`redis-server`加上要修改配置名和值(可以是多对),没有设置的配置将使用默认配置**:

```shell
$ redis-server --configKey1 configValue1 --configKey2 configValue2

 

例如,如果要用`6380`作为端口启动`Redis`,那么可以执行:

``shell
$ redis-server --port 6380

 

**虽然运行配置可以自定义配置,但是如果需要修改的配置较多或者希望将配置保存到文件中,不建议使用这种方法**。

##### 配置文件启动

将配置写到指定文件里,例如我们将配置写到了`/opt/redis/redis.conf`中,那么只需要执行如下命令即

可启动`Redis`:

```shell

$ redis-server /opt/redis/redis.conf

 

`Redis`有`60`多个配置,这里只给出一些重要的配置(如下表),其他配置会随着不断深入学习进行介绍。

| 配置名 | 配置说明 |
|:------|:--------|
| **port** | **端口** |
| **logfile** | **日志文件** |
| **dir** | **Redis工作目录(存入持久化文件和日志文件)** |
| **daemonize** | **是否以守护进程的方式启动Redis** |

 

运维提示

Redis目录下都会有一个redis.conf配置文件,里面就是Redis的默认配置,通常来讲我们会在一台机器上启动多个Redis,

并且将配置集中管理在指定目录下,而且配置不是完全手写的,而是将redis.conf作为模板进行修改。

#### Redis命令行客户端

现在我们已经启动了`Redis`服务,下面将介绍如何 **使用`redis-cli`连接、操作`Redis`服务**。

`redis-cli`可以使用两种方式连接`Redis`服务器。

+ **第一种是交互式方式**:

通过 **`redis-cli -h {host} -p {port}`** 的方式连接到`Redis`服务,

之后所有的操作都是通过交互的方式实现,不需要再执行`redis-cli`了,例如:

$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"

 

+ **第二种是命令方式**:用 **`redis-cli -h {host} -p {port} {command}`** 就可以直接得到命令的返回结果,

例如:

```shell

 

$ redis-cli -h 127.0.0.1 -p 6379 get hello
"world"

**注意:如果没有`-h`参数,那么默认连接`127.0.0.1`;如果没有`-p`,那么默认`6379`端口,也就是说如果`-h`和`-p`

都没有提供就是连接`127.0.0.1:6379`这个`Redis`实例**。

 

#### 停止Redis服务

**`Redis`提供了`shutdown`命令来停止`Redis`服务**,例如要停掉`127.0.0.1`上`6379`端口上的`Redis`服务,

可以执行如下操作:

```shell

$ redis-cli shutdown

当使用`redis-cli`再次连接该`Redis`服务时,看到`Redis`已经“失联”:

```shell

$ redis-cli 
Could not connect to Redis at 127.0.0.1:6379: Connection refused

 

这里有三点需要注意:

1. **`Redis`关闭的过程:断开与客户端的连接、持久化文件生成,是一种相对优雅的关闭方式**。

2. **除了可以通过`shutdown`命令关闭`Redis`服务以外,还可以通过`kill`进程号的方式关闭掉`Redis`,

但是不要粗暴地使用`kill -9`强制杀死`Redis`服务,不但不会做持久化操作,还会造成缓冲区等资源不能被优雅关闭,

极端情况会造成`AOF`和复制丢失数据的情况**。

3. **`shutdown`还有一个参数,代表是否在关闭`Redis`前,生成持久化文件**:

```shell
$ redis-cli shutdown nosave

#或
$ redis-cli shutdown save