前言
在 Linux 服务器上有两种常用的方式搭建 Redis 环境,一种是直接原生的本地安装,一种就是使用 Docker,使用 Docker 的话比较快速方便,具体搭建流程参考我的另一篇博客:【Docker】之安装 Redis。
但实际的开发环境可能更多的使用本地安装的方式进行搭建,所以这里我就演示如果在 Linux 系统下本地安装搭建 Redis 环境,以 CentOS7 系统为例。
Redis
环境搭建流程
1、下载 Redis
直接前往 Redis 的官网下载地址:https://redis.io/download/,根据自己的需求下载对应版本的稳定版本,下载下来的是一个 gz
压缩格式的 tar
包:redis-stable.tar.gz
(这里我下载时的版本为 7.2.3)。
解压 Redis:
下载下来后放到 Linux 环境的目录下,一般我会在 /usr/local/
目录下创建一个 application/
目录用来存放自己安装的应用软件。放好压缩包后,执行以下解压缩命令:
tar -xzvf redis-stable.tar.gz
为了便于后续维护,我根据版本给它重命名一下:
mv redis-stable redis-7.2.3
注意:以上的操作并不是无意义的,由于安装包中包含了 Redis 服务需要的各个配置文件,比如:redis.conf
、sentinel.conf
等,后续进行配置更改都要用到这些文件。同时安装包里面也包含了 Redis 的 README.md
帮助文档、src
源码文件等,所以需要尽可能规范好安装包的位置和命名。
2、编译安装 Redis
进入解压缩后的 Redis 安装包目录:
cd redis-7.2.3
执行编译安装命令:
make && make install
因为 Redis 是用 C 语言编写的,所以编译需要用到 gcc
,没有的话就安装一下,比如:yum install -y gcc
。
安装完成后,默认的安装目录在 /usr/local/bin
下:
$ ls /usr/local/bin/redis* -l
-rwxr-xr-x. 1 root root 6900632 Dec 25 03:24 redis-benchmark
lrwxrwxrwx. 1 root root 12 Dec 25 03:24 redis-check-aof -> redis-server
lrwxrwxrwx. 1 root root 12 Dec 25 03:24 redis-check-rdb -> redis-server
-rwxr-xr-x. 1 root root 7620880 Dec 25 03:24 redis-cli
lrwxrwxrwx. 1 root root 12 Dec 25 03:24 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 15411784 Dec 25 03:24 redis-server
这其中有三个关键的命令:
redis-cli
:是 Redis 提供的命令行客户端;redis-server
:是 Redis 的服务端启动脚本;redis-sentinel
:是 Redis 的哨兵启动脚本;
我们可以查看一下当前的版本:
$ redis-server -v
Redis server v=7.2.3 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64
安装成功后可以执行命令 make clean
将编译过程中产生的中间文件清理掉,这可以节省一些空间。
3、运行 Redis
服务
启动 Redis 服务的方式有多种,比如直接默认启动,或者指定配置文件启动,同时我们还可以自定义 service
服务实现开机自动启动。下面我们分别讲解这几种启动方式。
3-1、默认启动
安装完成之后,我们不加任何启动参数,直接运行 redis-server
命令就是以默认形式启动 Redis 服务:
$ redis-server
启动成功后就可以看到我们 Redis 经典的存储 Logo 标志:
11944:M 25 Dec 2023 08:19:30.909 * monotonic clock: POSIX clock_gettime
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 7.2.3 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 11944
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | https://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
我们可以运行 redis-cli
客户端命令来检查服务运行情况:
$ redis-cli
127.0.0.1:6379> ping
PONG
redis-cli
命令常用的参数有:
-h
:指定要连接的redis节点的IP地址,默认是127.0.0.1
-p
:指定要连接的redis节点的端口,默认是6379
;-a
:指定 redis 的访问密码。
注意: 这种 redis-server
启动方式属于前台启动,会阻塞整个会话窗口,可以通过关闭窗口或者按下 CTRL + C
来停止 Redis 服务,所以,不推荐使用这种方式启动 Redis 服务。
3-2、指定配置文件启动
Redis 服务启动的时候可以加载指定的配置文件,我们可以在配置文件中修改配置实现 Redis 在后台以守护进程的方式启动。
配置文件在我们的安装包目录下,名字叫 redis.conf
,修改配置文件之前我们先备份一下:
cp redis.conf redis.conf.back
然后编辑 redis.conf 文件,将里面的 daemonize
设置为 yes
则表示让 Redis 服务在后台以守护进程的形式运行(更多完整的配置参数参考后面的参数讲解):
daemonize yes
修改完保存之后,我们指定配置形式启动 Redis 服务:
redis-server /usr/local/application/redis-7.2.3/redis.conf
想要关闭服务的话可以先查询 Redis 服务的运行进程号(PID
):
$ ps -ef | grep redis-server
root 14783 1 0 09:17 ? 00:00:00 redis-server 127.0.0.1:6379
root 14968 10044 0 09:20 pts/1 00:00:00 grep --color=auto redis-server
然后再通过 kill
命令关闭服务进程:
kill -9 14783
!!关于后台进程警告提示:
当开启 Redis 后台运行并启动时会提示以下警告:
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328.
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.
这个错误消息大致的意思是 Redis 提示您需要启用内存过度分配(memory overcommit)以确保在低内存条件下,后台保存(background save)或复制(replication)操作能够正常进行。未启用内存过度分配可能导致这些操作在低内存情况下失败,甚至在没有低内存情况下也可能导致失败。
此外,它还提到了一个关于 jemalloc
的 issues
问题,感兴趣的话可以进去看一下。
解决问题方式也很简单,提示中也给出的解决方案:我们需要编辑 /etc/sysctl.conf
文件,然后添加以下内容,然后保存文件(想要生效需要重启系统):
vm.overcommit_memory = 1
如果想要不重启系统立即生效的话,可以运行以下命令:
sysctl vm.overcommit_memory=1
运行以下命令验证更改是否已生效,如果它返回1,则表示内存过度分配已成功启用:
cat /proc/sys/vm/overcommit_memory
3-3、开机自动启动
对于需要开机自动启动的服务程序,我们一般通过 systemctl
命令来实现,比如:
systemctl enable redis-server
但这种方式无法加载指定配置来自定义 Redis 服务的启动参数配置,但我们可以编写 .service
文件来实现。
首先,我们先在 /etc/systemd/system/
目录下创建 Redis 的服务系统文件 redis.service
(名称可以自己定义):
vim /etc/systemd/system/redis.service
文件内容如下:
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/application/redis-7.2.3/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存文件后重载系统服务:
systemctl daemon-reload
重载服务之后,我们就可以直接通过操作 redis
命令来操作 redis-server
服务了:
# 查看状态
systemctl status redis
# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
对应的,执行下面的命令就可以实现开机自动启动了:
systemctl enable redis
4、配置常用的 redis.conf
参数
在 redis.conf
配置文件种,除了上面提到的设置守护进程参数 daemonize yes
之外,还有其他关键的设置参数,这里,我们就展开讲解一些常用的关键参数:
# 守护进程,修改为yes后即可后台运行
daemonize yes
# 设置允许访问的地址,默认是127.0.0.1,表示只能在本地访问。修改为0.0.0.0则可以在任意IP访问(生产环境不要设置为0.0.0.0)
bind 0.0.0.0
# 设置访问密码,设置后需要输入对应的密码才能连接 Redis 服务
requirepass 123456
# 监听的端口
port 6379
# 工作目录,默认是当前目录,也就是运行 redis-server 时的命令,日志、持久化等文件会保存在这个目录
dir ./
# 设置数据库数量,设置为3则代表只使用3个库,默认有16个库,编号0~15
databases 3
# 设置 redis 能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile "redis.log"
注意:由于 protected-mode
默认 yes
,此时如果想要远程访问 Redis 的话需要设置 bind
和 requirepass
,否则就需要将 protected-mode
设置为 no
(不推荐)。