【Linux】之搭建 Redis 环境

前言


在 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.confsentinel.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)操作能够正常进行。未启用内存过度分配可能导致这些操作在低内存情况下失败,甚至在没有低内存情况下也可能导致失败。

此外,它还提到了一个关于 jemallocissues 问题,感兴趣的话可以进去看一下。

解决问题方式也很简单,提示中也给出的解决方案:我们需要编辑 /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 的话需要设置 bindrequirepass,否则就需要将 protected-mode 设置为 no不推荐)。

相关推荐

  1. Linux Redis 环境

    2023-12-28 11:04:02       42 阅读
  2. Linux 服务器环境

    2023-12-28 11:04:02       22 阅读
  3. Linux-基础环境

    2023-12-28 11:04:02       14 阅读
  4. Linux tftp 环境

    2023-12-28 11:04:02       11 阅读
  5. Linux nfs 环境

    2023-12-28 11:04:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-28 11:04:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-28 11:04:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-28 11:04:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-28 11:04:02       18 阅读

热门阅读

  1. 数据结构-怀化学院期末题(34)

    2023-12-28 11:04:02       36 阅读
  2. 图论 经典例题

    2023-12-28 11:04:02       29 阅读
  3. gRPC-Go基础(2)protobuf基础

    2023-12-28 11:04:02       26 阅读
  4. 本地网络禁用了在哪里开启?

    2023-12-28 11:04:02       38 阅读
  5. go 语言程序设计第2章--程序结构

    2023-12-28 11:04:02       31 阅读
  6. myBatis-CRUD

    2023-12-28 11:04:02       37 阅读