详细讲解 Redis 的两种安装部署方式

运维 数据库运维 Redis
Redis 是一款比较常用的 NoSQL 数据库,我们通常使用 Redis 来做缓存,这是一篇关于 Redis 安装的文章,所以不会涉及到 Redis 的高级特性和使用场景,Redis 能够兼容绝大部分的 POSIX 系统。

 Redis 是一款比较常用的 NoSQL 数据库,我们通常使用 Redis 来做缓存,这是一篇关于 Redis 安装的文章,所以不会涉及到 Redis 的高级特性和使用场景,Redis 能够兼容绝大部分的 POSIX 系统,例如 Linux、OS X 等,但是很遗憾不支持在 Windows 上安装,当然如果你需要在 windows 下安装 redis 的话,也是可以的,微软公司的开源技术组在 GitHub 上 维护一个 Redis 的分支,GitHub 地址为:https://github.com/microsoftarchive/redis,我看了一下这上面的版本比较旧,所以我个人不推荐使用这个来安装 Redis ,Windows 用户可以使用 Docker 容器来安装,也是非常方便、简单的,接下来我们就一起来看看 Redis 的安装方式吧。

[[282267]]

1、Linux 系统下安装 redis

安装

在 redis 官网中有安装教程,链接:https://redis.io/download,安装步骤我拷贝过来了,步骤如下:

  1. $ wget http://download.redis.io/releases/redis-5.0.6.tar.gz 
  2. $ tar xzf redis-5.0.6.tar.gz 
  3. $ cd redis-5.0.6 
  4. $ make 

我在 /usr/local 目录下面操作的这些命令,也就是说 Redis 的安装目录为 /usr/local ,这些命令执行完之后你的机器上安装好 Redis ,在安装的过程中,如果你的机器上没有安装 gcc ,你安装好 gcc 之后再 make 可能会报以下错误

  1. jemalloc/jemalloc.h: No such file or directory 

当时没有截取详细的错误信息,只把主要的一段截取出来了,这个错误的原因是我们上一次 make 报错之后,有编译后的文件,所以我们需要清除上一次的残留文件再重新编译,将 make 换成 make distclean && make 就可以了。

redis.conf 文件

redis.conf 是 Redis 的配置文件,redis 的所有配置有在这个文件里面,这个文件挺大的有接近 1400 行,有关 redis 的操作、使用说明都在里面,可以详细的阅读阅读这个配置文件,大部分情况下我们使用默认配置就行,只需要设置少量配置就行。redis.conf 的存放位置在 Redis 的安装目录下,我这里是 /usr/local/redis-5.0.5 目录下,一起来看看我们可能会修改的几个配置:

  • bind 127.0.0.1:允许访问机器的IP,默认只有本机才能访问,你可以修改 ip 来运行其他机器也能访问,但是如果你想让所有机器都可以访问的话,直接设置为 bind 0.0.0.0 就行了。
  • port 6379:redis 实例启动的端口,默认为 6379
  • daemonize no:是否以守护进程的方式运行,默认是 no,也就是说你把启动窗口关闭了,redis 实例也就关闭了,一般这个选项我们设置为 yes,以守护进程的方式运行,说俗一点就是后台运行。
  • pidfile /var/run/redis_6379.pid:如果我们使用守护进程方式运行的话 ,就会产生一个后缀名为 .pid 的文件,这个使用默认的也行
  • dir ./:持久化文件存放位置,这个配置我们还是设置一下为好,我这里设置为 dir /usr/local/redis_data
  • appendonly no:是否开启 AOF 持久化方式,redis 默认只开启了 RDB 模式,这里我们设置为 yes,两种方式都开启,双重保险,关于这两种方式的区别,我们后面在学习

好像大概设置这几个就好了,更多关于 redis.conf 的配置,你可以详细阅读 redis.conf 配置文件或者查阅相关手册。

redis 的启动

Redis 的启动非常简单,Redis 安装完成之后,会在 /usr/local/redis-5.0.5/src 存放 Redis 的 shell 交互命令,其中有一个 redis-server ,这个就是 Redis 的启动命令,执行:

  1. ./redis-server   /usr/local/redis-5.0.5/redis.conf 

后面跟的是 redis.conf 的文件路径,不出意外的话我们将启动成功,你会看到如下界面:

 

redis 启动

这里我们使用的是守护进程的方式启动,所以不会出现带有 redis logo 的启动界面,我们可以使用 shell 命令登录到 Redis 中,还是在 src 目录下面,执行下面这条命令:

  1. ./redis-cli 

这命令你就进入了 shell 交互界面,./redis-cli 命令可以带一些参数,例如 -h IP 这个就可以进入指定机器的 Redis 实例,进入之后你就可以进行一些操作了,如下图所示:

 

redis 操作

redis 关闭

Redis 的关闭方式有两种,一种是在 shell 交互界面关闭,另一种是 kill + 进程号关闭 Redis 实例的方式

shell 交互界面关闭

  1. shutdown [nosave|save] 

在 shell 交互界面输入 shutdown 命令就可以关闭 Redis 实例,后面有一个可选参数,nosave 就是不将内存中的数据持久化,save 就是将内存中的数据持久化。shutdown 关闭方式是比较优雅的关闭方式,建议使用这种关闭方式

Kill + 进程号关闭 Redis 实例

使用 ps -ef|grep redis 查看 Redis 进程号,如下图所示:

 

查看 redis 进程号

在这里找到我们需要关闭 redis 实例的进程号,比如这里我们的进程号为 27133,那么我们就直接使用 kill 27133 关闭 Redis 实例服务,这种方式我们需要注意一个地方,那就是需要我们去把 pid 文件删掉,pid 文件存放的位置我们在 redis.conf 里配置的 pidfile /var/run/redis_6379.pid,我们需要到 /var/run 目录下把 redis_6379.pid 删掉,这样下一次才能正常重启 Redis 服务。

上面两种方式都可以关闭 Redis 服务,随便选一种都行,但是切记不要使用 Kill 9 方式关闭 Redis 进程,这样 Redis 不会进行持久化操作,除此之外,还会造成缓冲区等资源不能优雅关闭,极端情况下会造成 AOF 和复制丢失数据的情况

redis 开机自启动

在服务器上我们可能需要将 Redis 设置为开机自启动,其实这个也非常简单,我们只需要做以下四步操作即可。

1、 编写配置脚本 vim /etc/init.d/redis

  1. #!/bin/sh 
  2. # Simple Redis init.d script conceived to work on Linux systems 
  3. as it does use of the /proc filesystem. 
  4. #chkconfig: 2345 80 90 
  5. #description:auto_run 
  6. # 端口号 
  7. REDISPORT=6379 
  8. # 启动命令 
  9. EXEC=/usr/local/redis-5.0.5/src/redis-server 
  10. # shell 交付命令 
  11. CLIEXEC=/usr/local/redis-5.0.5/src/redis-cli 
  12. # pid 存放位置 
  13. PIDFILE=/var/run/redis_${REDISPORT}.pid 
  14. # redis 配置文件 
  15. CONF="/usr/local/redis-5.0.5/redis.conf" 
  16.  
  17. case "$1" in 
  18.     start) 
  19.         if [ -f $PIDFILE ] 
  20.         then 
  21.                 echo "$PIDFILE exists, process is already running or crashed" 
  22.         else 
  23.                 echo "Starting Redis server..." 
  24.                 $EXEC $CONF 
  25.         fi 
  26.         ;; 
  27.     stop) 
  28.         if [ ! -f $PIDFILE ] 
  29.         then 
  30.                 echo "$PIDFILE does not exist, process is not running" 
  31.         else 
  32.                 PID=$(cat $PIDFILE) 
  33.                 echo "Stopping ..." 
  34.                 $CLIEXEC -p $REDISPORT shutdown 
  35.                 while [ -x /proc/${PID} ] 
  36.                 do 
  37.                     echo "Waiting for Redis to shutdown ..." 
  38.                     sleep 1 
  39.                 done 
  40.                 echo "Redis stopped" 
  41.         fi 
  42.         ;; 
  43.     *) 
  44.         echo "Please use start or stop as first argument" 
  45.         ;; 
  46. esac 

2、修改 redis.conf,设置 redis 为守护进程方式运行

  1. ################################# GENERAL ##################################### 
  2.  
  3. By default Redis does not run as a daemon. Use 'yes' if you need it. 
  4. # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. 
  5. daemonize yes 

3、修改文件执行权限

  1. chmod +x /etc/init.d/redis 

4、设置开机启动

  1. # 启动 redis 
  2. service redis start 
  3. # 停止 redis 
  4. service redis stop 
  5. # 开启服务自启动 
  6. chkconfig redis on 

2、Docker 安装Redis

Docker 安装 Redis 整体来说比较方便,我说的是非生产环境,就是自己搭着测试或者学习的环境,下面的步骤全部建立在你已经在你的电脑上安装了 Docker 的基础上,下面就来开启安装之旅。

1、拉取 redis 镜像

  1. docker pull redis 

2、快速启动

  1. docker run -p 6379:6379 --name myredis -d redis redis-server --appendonly yes 

这种方式启动使用的默认的 redis.conf 配置,我们先来看看这几个参数的意思

  • -p 6379:6379:映射端口,前面的 6379 是外部 redis 端口,后面的 6379 是容器内部的 redis 端口
  • --name myredis :容器对应的名称
  • redis redis-server:redis 代表着 redis 镜像 redis-server 表示的是执行的命令,也是就 redis 的启动命令,跟我们 linux 下面的 ./redis-server 一样
  • --appendonly yes:开启 AOF 持久化

3、使用 redis

通过上面的步骤,我们已经在 Docker 中启动了 Redis 服务,下面我们就来通过 redis-cli 访问一下,使用下面这条命令就可以启动 redis-cli

  1. docker exec -it dockerRedis redis-cli 

其中 dockerRedis 是你启动 Redis 容器名称,不出意外的话,你可以启动一个 redis-cli 客户端,如下图所示:

 

docker redis-cli 客户端

上面就是使用 Docker 简单的启动 Redis ,整体来说比 linux 上面安装启动要方便不少,主要是你可以在 windows 系统上运行,虽然最终它还是运行在 linux 上面的,但是这个过程我们是无感知的。你可以能会问:我想在启动的时候知道 redis.conf 可行不?答案是可行的,但是如果你对 Docker 不了解的话,可能会遇到一些坑,我就遇到了,因为我对 Docker 不是太了解,平时使用 docker 都是只需要传入参数就好了,没有传过文件。关于启动时指定配置文件,在 redis 镜像那里有说明,但是是 linux 下面的,并不是 windows 系统下的 Docker 配置方式,所以我就百度到了下面这段命令

  1. docker run -v /d:/dockerdata/redis/config/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf 

这段命令就是一个坑,压根就没有,启动这条命令,你将得到如下反馈:

显然这条命令是没有用的,当然这只是我个人认为,也许是我操作失误,也许是我知识面不够,如果朋友们发现错误还请多多指教,这里我就先当它是错误的,正确的做法是在 Docker 的宿主机上存放 redis.conf 文件,显然 Docker 的宿主机并不是 windows 系统,而是启动在 windows 系统上的虚拟机,所以我们需要进入到虚拟机里面,Docker Quickstart Terminal启动默认界面并没有正真的登录到虚拟机,所以我们需要更改登录方式,使用 docker-machine ssh 命令,如下图所示:

 

Docker Quickstart Terminal 启动方式 

这样我们就进入到了真正的虚拟机里面,我们就在一台虚拟机上操作了,跟我们在 linux 上的安装一样,我们先建立两个目录用来存放 Redis 配置:

  1. /usr/local/redis:存放redis.conf /usr/local/redis/data :存放持久化文件 

建立好两个目录后, 我们把 redis.conf 放在 /usr/local/redis 目录下,使用下面这条 Docker 命令启动 Redis 镜像:

  1. docker run -p 6379:6379 -v /usr/local/redis/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/redis/data:/data --name dockerRedis -d redis  redis-server /usr/local/etc/redis/redis.conf 

这条 docker 启动命令跟上面的有一点区别,有两个参数我在这里说明一下:

  • -v /usr/local/redis/redis.conf:/usr/local/etc/redis/redis.conf:这参数是将 /usr/local/redis/redis.conf 复制到 /usr/local/etc/redis/redis.conf 下
  • -v /usr/local/redis/data:/data:容器内持久化文件的存放位置也会映射到宿主机,换句话说在 /usr/local/redis/data 也会存放持久化文件

到此,Docker 安装 Redis 的复杂操作也做完了,如果没什么特别要求的话,使用简单的 docker 启动就好了,简单方便,完全够用了。

 

责任编辑:华轩 来源: 平头哥的技术博文
相关推荐

2010-08-03 13:27:04

FlexBuilder

2010-01-08 10:52:17

Ubuntu VMwa

2014-05-21 11:00:55

Windows Azu分布式部署

2011-03-03 10:26:04

Pureftpd

2010-08-06 09:38:11

Flex读取XML

2023-03-29 13:06:36

2021-05-27 10:57:01

TCP定时器网络协议

2010-02-24 14:25:48

WCF地址

2010-09-07 11:09:59

2010-10-21 16:24:18

sql server升

2009-06-25 13:43:00

Buffalo AJA

2009-09-08 15:22:20

Spring依赖注入

2011-04-02 09:48:38

深拷贝

2010-07-15 14:38:55

Perl eval函数

2016-11-07 09:02:02

Malloc内存syscall

2010-10-20 15:48:56

SQL Server许

2011-06-16 10:02:08

JAVA静态载入

2021-12-08 10:47:35

RabbitMQ 实现延迟

2024-02-04 09:24:45

MyBatisSQL语句Spring

2009-06-23 18:18:13

SpringHibernate
点赞
收藏

51CTO技术栈公众号