redis单机版、主从、哨兵模式及集群模式搭建详解

1 redis单机版安装

这里使用redis-6.2.6最新stable版本作为演示, 如果在生产环境部署, 建议不要使用最新版本,使用一个已经被广泛使用的稳定版本,以防止出现一些未知的问题无法解决。
下载地址:https://download.redis.io/releases/redis-6.2.6.tar.gz

1.1 上传压缩包到服务器

上传redis-6.2.6.tar.gz安装压缩包到服务器/opt/packages(这是我的习惯,软件压缩包都会上传到这个目录下面)

1.2 解压压缩包

# 解压命令

tar -zxf redis-6.2.6.tar.gz

1.3 编译并安装redis

# 进入解压缩之后的目录

cd redis-6.2.6

# 编译安装

make&&make install prefix=/usr/local/software

1.4 安装完成验证

安装完成到/usr/local/software/redis/bin检查是否安装成功

1.5 准备配置文件

将解压包redis-6.2.6目录下的redis.conf复制到/usr/local/software/redis/bin目录下

# 拷贝配置文件到安装目录下的bin目录下

cp /opt/packages/redis-6.2.6/redis.conf /usr/local/software/redis/bin

1.6 配置redis-server和redis-cli命令全局可用

通过建立软连接的方式,让redis-server和redis-cli命令全局可用【稍后在拓展部分详细再说说配置系统

变量的几种常见的方式】,具体操作命令如下:

# 创建redis-server和redis-cli命令调用的软链接到/usr/bin目录下即可全局调用

ln -s /usr/local/software/redis/bin/redis-server /usr/bin/redis-server

ln -s /usr/local/software/redis/bin/redis-cli /usr/bin/redis-cli

1.7 redis启动、停止、重启的命令

# 启动redis服务端

redis-server /etc/redis.conf

# 重启redis服务端

redis-cli shutdown

redis-server /etc/redis.conf

# 启动redis客户端

redis-cli

# 指定服务端端口启动

redis-cli -p 6379

# redis集群通过客户端连接【如果是集群, 一定要加上-c参数】

redis-cli -p 6379 -c

1.8 redis启动后台运行设置

如果启动redis-server需要设置后台运行,需要修改配置文件中的如下内容

daemonize yes

redis单机版、主从、哨兵模式及集群模式搭建详解_第1张图片

1.9 外部访问redis的配置修改

# 注释掉只允许本地连接的设置项

# bind 127.0.0.1 -::1

# 关闭保护模式

protected-mode no

# 设置redis的连接密码[不设置就是裸奔,千万不要]

requirepass redis的登录密码【自己设置,注意requirepass后面的空格不能少哦】

redis单机版、主从、哨兵模式及集群模式搭建详解_第2张图片

保存退出,启动redis-server,发现,redis-server启动之后直接在后台运行,不会再占用命令行了。

1.10 配置redis为系统服务,开机自启

CentOS7.X之后的版本都使用systemctl命令来管理系统服务,而不是使用service命令了

配置系统服务的配置文件存放目录:/usr/lib/systemd/system

在/usr/lib/systemd/system下创建配置文件redis.service,

# 创建redis的配置文件

vim /usr/lib/systemd/system/redis.service

配置文件内容如下:

[Unit]

Description=redis

After=network.target

[Service]

Type=forking

PIDFile=/var/run/redis_6379.pid

# 【这里注意修改redis-server及redis.conf的路径为你自己的redis的安装目录】

ExecStart=/usr/local/software/redis/bin/redis-server /usr/local/software/redis/bin/redis.conf

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

[Install]

WantedBy=multi-user.target

最后一定不要忘记:wq!保存退出

1.11 systemctl命令管理redis的常用指令


# 设置redis服务开机自启

systemctl enable redis.service

# 启动redis服务

systemctl start redis.service

# 停止redis服务

systemctl stop redis.service

# 重启redis服务

systemctl restart redis.service

# 查询redis服务状态

systemctl status redis.service

systemctl status redis.service -l

2 redis主从复制搭建

资源有限, 这里就在同一台机器上面进行主从复制搭建演示

首先先检查机器上是否有正在运行的redis服务,如果有,则先停止该redis服务

2.1 检查并停止已经运行的redis服务

# 检查redis运行状态的方式一

ps -ef |grep redis

# 检查redis运行状态的方式二

systemctl status redis(这种方式的前提是redis已经配置成系统服务)

# 关闭redis服务方式一

systemctl stop redis(这种方式的前提是redis已经配置成系统服务)

# 关闭redis服务方式二

redis-cli shutdown

2.2 创建redis主从节点并配置

  • 1、创建集群安装目录(主、从目录)
# 创建主从复制的安装目录
mkdir -p /usr/local/software/redis-cluster/master /usr/local/software/redis-cluster/slave1 /usr/local/software/redis-cluster/slave2
  • 2、把之前安装的redis单机版中bin目录复制三份,分别叫做:master、slave1、slave2
cp -r /usr/local/software/redis/bin /usr/local/software/redis-cluster/master/ 

cp -r /usr/local/software/redis/bin /usr/local/software/redis-cluster/slave1/ 

cp -r /usr/local/software/redis/bin /usr/local/software/redis-cluster/slave2/ 
  • 3、修改配置文件

master主节点修改配置文件/usr/local/software/redis-cluster/master/bin/redis.conf如下:


# 因为之前已经安装了一个单机版的redis占用了6379端口,这里主节点就使用6380

port 6380

# 进程ID文件也要区别开来

pidfile /var/run/redis_6380.pid

# 日志文件[每个节点产生的日志文件也隔离开]

logfile "/var/log/redis/redis_6380.log"

slave1节点修改配置文件/usr/local/software/redis-cluster/slave1/bin/redis.conf如下:


# 因为之前已经安装了一个单机版的redis占用了6379端口、主节点占用了6380,这里从1节点就使用6381

port 6381

# 进程ID文件也要区别开来

pidfile /var/run/redis_6381.pid

# 日志文件[每个节点产生的日志文件也隔离开]

logfile "/var/log/redis/redis_6381.log"

# 指定主从赋值的master节点ip和端口

replicaof 192.168.1.103 6380

slave2节点修改配置文件/usr/local/software/redis-cluster/slave2/bin/redis.conf如下:


# 因为之前已经安装了一个单机版的redis占用了6379端口、主节点占用了6380,这里从2节点就使用6382

port 6382

# 进程ID文件也要区别开来

pidfile /var/run/redis_6382.pid

# 日志文件[每个节点产生的日志文件也隔离开]

logfile "/var/log/redis/redis_6382.log"

# 指定主从赋值的master节点ip和端口

replicaof 192.168.1.103 6380

  • 4、设置主从启动脚本

# 创建脚本文件

vim /usr/local/software/redis-cluster/start.sh

启动脚本内容如下:


ECHO "starting redis cluster..."

# master主节点启动

/usr/local/software/redis-cluster/master/bin/redis-server /usr/local/software/redis-cluster/master/bin/redis.conf

# slave1节点启动

/usr/local/software/redis-cluster/slave1/bin/redis-server /usr/local/software/redis-cluster/slave1/bin/redis.conf

# slave2节点启动

/usr/local/software/redis-cluster/slave2/bin/redis-server /usr/local/software/redis-cluster/slave2/bin/redis.conf

ECHO "redis cluster start success"

修改启动脚本执行权限,否则一般用户无法执行


chmod a+x /usr/local/software/redis-cluster/start.sh

  • 5、启动主从复制

启动脚本


sh /usr/local/software/redis-cluster/start.sh

或

/usr/local/software/redis-cluster/start.sh

查询主从复制运行状态


ps -ef |grep redis

如果见到如下显示,说明主从复制已经部署成功了,下面我们来测试一下redis的主从复制以及数据同步

# ps -ef |grep redis
root        1358       1  0 17:41 ?        00:00:01 /usr/local/software/redis-cluster/master/bin/redis-server *:6380
root        1360       1  0 17:41 ?        00:00:01 /usr/local/software/redis-cluster/slave1/bin/redis-server *:6381
root        1362       1  0 17:41 ?        00:00:01 /usr/local/software/redis-cluster/slave2/bin/redis-server *:6382
  • 6、主从复制和数据同步测试

1)验证主从复制是否只有主节点可写入, 而从节点只能读,不能写?

首先,我们使用master节点的客户端工具redis-cli连接主节点,往master节点中写入一条数据,再查一下,看是否正常


/usr/local/software/redis-cluster/master/bin/redis-cli -p 6380

select 0

set username master

get username

测试结果: master节点可以正常写入数据

其次,我们使用slave1节点的客户端工具redis-cli连接slave1节点,测试测试可以往slave1节点中写入数据


/usr/local/software/redis-cluster/slave1/bin/redis-cli -p 6381

select 0

set username slave1

测试结果: slave1节点无法写入数据

再次,我们使用slave2节点的客户端工具redis-cli连接slave2节点,测试测试可以往slave2节点中写入数据


/usr/local/software/redis-cluster/slave2/bin/redis-cli -p 6382

select 0

set username slave2

测试结果: slave2节点无法写入数据

结论: redis集群只有主节点可写入, 而从节点只能读,不能写。

1)验证主节点写入数据, 从节点是否可以查询到主节点的数据,数据一致性校验?

我们使用slave1节点的客户端工具redis-cli连接slave1节点,测试slave1节点是否已经同步master节点的数据


/usr/local/software/redis-cluster/slave1/bin/redis-cli -p 6381

select 0

get username

我们使用slave2节点的客户端工具redis-cli连接slave2服务节点,测试slave2服务节点是否已经同步master节点的数据


/usr/local/software/redis-cluster/slave2/bin/redis-cli -p 6382

select 0

get username

结论: redis主从复制数据同步正常,能保证主从数据一致性。

问题: 虽然redis主从复制可以很好的解决读写分离、数据备份的问题, 但是同时它也带来一些问

题,如果负责写的redis服务突然挂掉了怎么办,因为我们知道我们的从节点只能读取数据,数据的主节

点一旦不能提供服务,那么整个服务的不在具体写数据的能力,如果我们不手动把主节点的宕机问题解

决并重新启动的话,那主从复制就废掉了。

解决方案: redis提供了哨兵模式。

哨兵模式主要就是提供一种高可用的解决方案,通过发送命令,让Redis服务器返回监控其运行状态,包

括主服务器和从服务器;当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模

式通知其他的从服务器,修改配置文件,让它们切换主机。

3 redis多哨兵模式搭建

3.1 创建哨兵安装目录


# 创建哨兵节点的安装目录

mkdir -p /usr/local/software/redis-sentinel

# 将redis单节点bin目录下所有的文件都拷贝到哨兵节点的安装目录下

cp -r /usr/local/software/redis/bin/* /usr/local/software/redis-sentinel

3.2、拷贝sentinel.conf到哨兵节点的安装目录下

redis提供的安装压缩包里面提供了哨兵模式的默认配置文件sentinel.conf,我们只需要把它从解压缩安

装包中拷贝过来使用即可

# 将sentinel.conf文件拷贝到哨兵节点的安装目录下

cp /opt/packages/redis-6.2.6/sentinel.conf /usr/local/software/redis-sentinel/

3.3、配置多个哨兵的配置文件

# 这里演示使用三个哨兵节点的配置过程

cd /usr/local/software/redis-sentinel/

# 复制添加另外两个哨兵节点的配置文件

cp sentinel.conf sentinel-26380.conf
 
cp sentinel.conf sentinel-26381.conf 

修改sentinel.conf配置文件的内容如下

# 服务启动端口

port 26379

# 以守护进程后台运行

daemonize yes

# pid文件

pidfile /var/run/redis-sentinel-26379.pid

# 日志文件所在目录

logfile “/var/log/redis-sentinel/sentinel-26379.log”

# 哨兵监控的redis节点

sentinel monitor redis-master 172.106.2.15 6380 2

修改sentinel-26380.conf配置文件的内容如下

# 服务启动端口

port 26380

# 以守护进程后台运行

daemonize yes

# pid文件

pidfile /var/run/redis-sentinel-26380.pid

# 日志文件所在目录

logfile “/var/log/redis-sentinel/sentinel-26380.log”

# 哨兵监控的redis节点

sentinel monitor redis-master 172.106.2.15 6380 2

修改sentinel-26381.conf配置文件的内容如下

# 服务启动端口

port 26381

# 以守护进程后台运行

daemonize yes

# pid文件

pidfile /var/run/redis-sentinel-26381.pid

# 日志文件所在目录

logfile “/var/log/redis-sentinel/sentinel-26381.log”

# 哨兵监控的redis节点

sentinel monitor redis-master 172.106.2.15 6380 2

3.4、配置多哨兵启动脚本文件

vim /usr/local/software/redis-sentinel/redis-sentinel/start.sh

ECHO "starting redis sentinels..."

# 哨兵节点1启动

/usr/local/software/redis-sentinel/redis-sentinel /usr/local/software/redis-sentinel/sentinel.conf

# 哨兵节点2启动

/usr/local/software/redis-sentinel/redis-sentinel /usr/local/software/redis-sentinel/sentinel-26380.conf

# 哨兵节点3启动

/usr/local/software/redis-sentinel/redis-sentinel /usr/local/software/redis-sentinel/sentinel-26381.conf

ECHO "redis sentinels start success"

修改启动脚本执行权限,否则一般用户无法执行


chmod a+x /usr/local/software/redis-cluster/start.sh

3.5、重新启动主从复制和多哨兵

启动主从节点

# 直接调用/usr/local/software/redis-cluster/start.sh也是可以的

sh /usr/local/software/redis-cluster/start.sh

启动多哨兵节点

# 直接调用/usr/local/software/redis-sentinel/start.sh也是可以的

sh /usr/local/software/redis-sentinel/start.sh

查询主从复制节点及多哨兵运行状态


ps -ef |grep redis

如果见到如下显示,说明主从节点以及多哨兵都启动成功了

# ps -ef |grep redis
root        6563       1  0 15:46 ?        00:00:00 /usr/local/software/redis-cluster/master/bin/redis-server *:6380
root        6565       1  0 15:46 ?        00:00:00 /usr/local/software/redis-cluster/slave1/bin/redis-server *:6381
root        6571       1  0 15:46 ?        00:00:00 /usr/local/software/redis-cluster/slave2/bin/redis-server *:6382
root        6585       1  0 15:46 ?        00:00:00 /usr/local/software/redis-sentinel/redis-sentinel *:26379 [sentinel]
root        6587       1  0 15:46 ?        00:00:00 /usr/local/software/redis-sentinel/redis-sentinel *:26380 [sentinel]
root        6589       1  0 15:46 ?        00:00:00 /usr/local/software/redis-sentinel/redis-sentinel *:26381 [sentinel]

3.6、验证多哨兵模式的高可用灾备机制是否生效

  • 1 首先检查master、slave1及slave2节点的状态是否正常
# 连接redis主从的master节点

/usr/local/software/redis-cluster/master/bin/redis-cli -p 6380

# 检查主从复制状态是否正常

info replication

# 连接redis主从的slave1节点

/usr/local/software/redis-cluster/slave1/bin/redis-cli -p 6381

# 检查主从复制状态是否正常

info replication

# 连接redis主从的slave2节点

/usr/local/software/redis-cluster/slave2/bin/redis-cli -p 6382

# 检查主从复制状态是否正常

info replication
  • 2 kill掉主节点,等上60秒,检查slave1及slave2节点是否有一个节点已经被选举为新的主节点
# 连接redis主从的slave1节点

/usr/local/software/redis-cluster/slave1/bin/redis-cli -p 6381

# 检查主从复制状态是否正常

info replication

# 连接redis主从的slave2节点

/usr/local/software/redis-cluster/slave2/bin/redis-cli -p 6382

# 检查主从复制状态是否正常

info replication

结果: 原来的salve1节点成为了新的主节点,slave2节点仍然是从节点

  • 3 重新启动原来的主节点,检查原主节点的运行状态
# 启动原主节点

/usr/local/software/redis-cluster/master/bin/redis-server /usr/local/software/redis-cluster/master/bin/redis.conf

# 连接原主节点

/usr/local/software/redis-cluster/master/bin/redis-cli -p 6380

# 检查主从复制状态是否正常

info replicatio

结果: 原来的master节点成为了新的从节点

结论: 哨兵模式在主从复制中可以良好监控节点的运行状态,当服务发生宕机或者其他异常问题导

致无法正常提供服务时, 可以自动检测异常并进行主备切换,保证服务在可控情况下一直正常对外提供

服务。

4 redis集群搭建

我们就将我们之前搭建的单机版的redis改造成集群,资源有限,还是在一台服务器上面进行演示

当集群中超过或等于1/2节点不可用时,整个集群不可用。为了搭建稳定集群,都采用奇数节点。

4.1、先创建并修改一个集群节点的配置文件

从/usr/local/software/redis/bin下把redis.conf复制到当前目录中,命名为redis-10080.conf

# 复制配置文件

cp /usr/local/software/redis/bin/redis.conf /usr/local/redis/bin/redis-10080.conf

# 修改配置文件

vim /usr/local/software/redis/bin/redis-10080.conf

redis-10080.conf文件中需要修改的内容如下【找到文档中这些配置参数改成如下】

port 10080

cluster-enabled yes

cluster-config-file nodes-10080.conf

cluster-node-timeout 15000

# appendonly yes 如果开启aof默认,需要修改为yes。如果使用rdb,此处不需要修改

daemonize yes

protected-mode no

pidfile /var/run/redis_10080.pid

logfile "/var/log/redis/redis-10080.log"

4.2、复制5份redis-10080.conf配置文件并修改

# 复制配置文件
cp /usr/local/software/redis/bin/redis-10080.conf /usr/local/software/redis/bin/redis-10081.conf

cp /usr/local/software/redis/bin/redis-10080.conf /usr/local/software/redis/bin/redis-10082.conf

cp /usr/local/software/redis/bin/redis-10080.conf /usr/local/software/redis/bin/redis-10083.conf

cp /usr/local/software/redis/bin/redis-10080.conf /usr/local/software/redis/bin/redis-10084.conf

cp /usr/local/software/redis/bin/redis-10080.conf /usr/local/software/redis/bin/redis-10085.conf

修改配置文件如下:

vim /usr/local/software/redis/bin/redis-10081.conf

使用命令行模式输入全局替换命令:%s#10080#10081#g, 之后:wq!保存退出
redis单机版、主从、哨兵模式及集群模式搭建详解_第3张图片
vim /usr/local/software/redis/bin/redis-10082.conf

使用命令行模式输入全局替换命令:%s#10080#10082#g, 之后:wq!保存退出

vim /usr/local/software/redis/bin/redis-10083.conf

使用命令行模式输入全局替换命令:%s#10080#10083#g, 之后:wq!保存退出

vim /usr/local/software/redis/bin/redis-10084.conf

使用命令行模式输入全局替换命令:%s#10080#10084#g, 之后:wq!保存退出

vim /usr/local/software/redis/bin/redis-10085.conf

使用命令行模式输入全局替换命令:%s#10080#10085#g, 之后:wq!保存退出

4.3、创建集群启动脚本

在/usr/local/software/redis/bin目录下创建start.sh脚本

vim start.sh

# 启动redis-10080节点

/usr/local/software/redis/bin/redis-server /usr/local/software/redis/bin/redis-10080.conf

# 启动redis-10081节点

/usr/local/software/redis/bin/redis-server /usr/local/software/redis/bin/redis-10081.conf

# 启动redis-10082节点

/usr/local/software/redis/bin/redis-server /usr/local/software/redis/bin/redis-10082.conf

# 启动redis-10083节点

/usr/local/software/redis/bin/redis-server /usr/local/software/redis/bin/redis-10083.conf

# 启动redis-10084节点

/usr/local/software/redis/bin/redis-server /usr/local/software/redis/bin/redis-10084.conf

# 启动redis-10085节点

/usr/local/software/redis/bin/redis-server /usr/local/software/redis/bin/redis-10085.conf

修改启动脚本执行权限,否则一般用户无法执行

chmod a+x /usr/local/software/redis/bin/start.sh

4.4、清空初始化数据文件dump.rdb

注意: 第一次启动cluster集群,执行之前一定要先删除dump.rdb


rm -f /usr/local/software/redis/bin/dump.rdb

4.5、启动集群

注意: 第一次启动cluster集群,执行之前一定要先删除dump.rdb

# 直接调用/usr/local/software/redis/bin/start.sh也可以

sh /usr/local/software/redis/bin/start.sh

# 检查集群状态

ps -ef |grep redis

如下所示说明redis集群启动成功

ps -ef |grep redis
root         698       1  0 17:32 ?        00:00:00 /usr/local/software/redis/bin/redis-server *:6379
root        1216       1  0 17:36 ?        00:00:00 /usr/local/software/redis/bin/redis-server *:10080 [cluster]
root        1218       1  0 17:36 ?        00:00:00 /usr/local/software/redis/bin/redis-server *:10081 [cluster]
root        1224       1  0 17:36 ?        00:00:00 /usr/local/software/redis/bin/redis-server *:10082 [cluster]
root        1230       1  0 17:36 ?        00:00:00 /usr/local/software/redis/bin/redis-server *:10083 [cluster]
root        1236       1  0 17:36 ?        00:00:00 /usr/local/software/redis/bin/redis-server *:10084 [cluster]
root        1242       1  0 17:36 ?        00:00:00 /usr/local/software/redis/bin/redis-server *:10085 [cluster]

4.6、使用redis-cli建立集群

  • 在redis5之后的版本中可以使用redis自带的redis-cli实现集群功能
  • 建议配置静态ip,ip改变集群失效
# 使用redis-cli建立集群的命令

./redis-cli --cluster create 172.106.2.15:10080 172.106.2.15:10081 172.106.2.15:10082 172.106.2.15:10083 172.106.2.15:10084 172.106.2.15:10085 --cluster-replicas 1

这样redis集群就搭建成功了, 下面我们来测试一下

4.7、使用redis-cli测试集群

刚才搭建的集群有3主3从, 10080/10081/10082是主节点, 10083/10084/10085是从节点,我们测试一下集群中的的数据同步是否正常

登录主节点10080

# 登录集群主节点的命令【-c这个参数不能省略, 这个参数代表集群】

/usr/local/software/redis/bin/redis-cli -p 10080 -c

# 切换到redis的数据库0

select 0

# 写入键值对数据

set username admin

登录其他主从节点,看看啊数据是否同步一致

登录主节点10081

# 登录集群主节点的命令【-c这个参数不能省略, 这个参数代表集群】

/usr/local/software/redis/bin/redis-cli -p 10081 -c

# 切换到redis的数据库0

select 0

# 查询数据

get username

登录主节点10081

# 登录集群从节点的命令【-c这个参数不能省略, 这个参数代表集群】

/usr/local/software/redis/bin/redis-cli -p 10084 -c

# 切换到redis的数据库0

select 0

# 查询数据

get username

其他节点的连接查询方式都类似,可以自行测试

结果: redis集群的主从复制很快,可以有效保证数据的一致性

4.8 redis集群的停止脚本

# 创建集群停止脚本

vim /usr/local/software/redis/bin/stop.sh

脚本内容如下:

# 停止10080节点

/usr/local/software/redis/bin/redis-cli -p 10080 shutdown

# 停止10081节点

/usr/local/software/redis/bin/redis-cli -p 10081 shutdown

# 停止10082节点

/usr/local/software/redis/bin/redis-cli -p 10082 shutdown

# 停止10083节点

/usr/local/software/redis/bin/redis-cli -p 10083 shutdown

# 停止10084节点

/usr/local/software/redis/bin/redis-cli -p 10084 shutdown

# 停止10085节点

/usr/local/software/redis/bin/redis-cli -p 10085 shutdown

修改启动脚本执行权限,否则一般用户无法执行

chmod a+x /usr/local/software/redis/bin/stop.sh

如果需要停止redis的集群服务,直接执行stop.sh脚本即可。

5 redis的两种持久化策略介绍

5.1、持久化策略之一RDB

  • rdb模式是默认模式,可以在指定的时间间隔内生成数据备份,默认保存到redis的安装目录下的

dump.rdb文件中。当redis重启后会自动加载dump.rdb文件中内容到内存中。

  • 用户可以使用SAVE(同步)或BGSAVE(异步)手动保存数据。

  • 具体的设置可以通过配置文件redis.conf中的save参数进行备份规则设置
    redis单机版、主从、哨兵模式及集群模式搭建详解_第4张图片

  • 可以设置服务器配置的save选项,让服务器每隔一段时间自动执行一次BGSAVE命令,可以通过save选项设置多个保存条件,但只要其中任意一个条件被满足,服务器就会执行BGSAVE命令。

# 服务器在3600秒之内,对数据库进行了至少1次修改

save 3600 1

# 服务器在300秒之内,对数据库进行了至少100次修改

save 300 100

服务器在60秒之内,对数据库进行了至少10000次修改

save 60 10000

5.2、 持久化策略之二AOF

​ AOF默认是关闭的,需要在配置文件中开启AOF。Redis支持AOF和RDB同时生效,如果同时存在,

AOF优先级高于RDB(Redis重新启动时会使用AOF进行数据恢复)

​ 监听执行的命令,如果发现执行了修改数据的操作,同时直接同步到数据库文件中。

5.2.1 开启设置

​ 修改redis.conf中

# 默认no

appendonly yes

# aof文件名

appendfilename "appendonly.aof"

5.3、 二者对比

策略名称 优点 缺点
rdb ​1) rdb文件是一个紧凑文件,直接使用rdb文件就可以还原数据数据;2)保存会由一个子进程进行保存,不影响父进程;3)恢复数据的效率要高于aof ​ 1)每次保存点之间导致redis不可意料的关闭,可能会丢失数据;2)由于每次保存数据都需要fork()子进程,在数据量比较大时可能会比较耗费性能。
aof ​1) 相对RDB数据更加安全 ​ 1)相同数据集AOF要大于RDB;2)相对RDB可能会慢一些。

6 redis常用的操作命令

redis的五种常用的数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)

具体的操作命令你给这里不赘述,如果需要用到直接去命令网站查询即可

提供几个很棒的redis命令示例帮助网站:

  • https://www.redis.net.cn/order/
  • http://doc.redisfans.com/
  • http://redis.cn/commands.html
  • https://www.runoob.com/redis/redis-keys.html

这几个网站都可以的, 需要用到了去查一下怎么用就可以了。

7 扩展知识

7.1 关于linux系统设置系统环境的几种方式

这里以redis-server和redis-cli设置全局调用为例

方式一:

将安装目录下服务端和客户端的可执行启动文件创建超链接到/usr/bin/即可

ln -s /usr/local/software/redis/bin/redis-server /usr/bin/redis-server

ln -s /usr/local/software/redis/bin/redis-cli /usr/bin/redis-cli

方式二:

在/etc/profile文件中将redis的安装目录/usr/local/software/redis/bin添加到系统环境变量里面

vim /etc/profile

# 在文件的最后一行追加上

export PATH=/usr/local/software/redis/bin:$PATH

# 另外一种方式

# export PATH=$PATH:/usr/local/software/redis/bin

:wq!保存退出

执行一下命令, 让配置立即生效

source /etc/profile

方式三:

在~/.bash.rc文件中将redis的安装目录/usr/local/software/redis/bin添加到系统环境变量里

vim ~/.bash.rc

# 在文件的最后一行追加上

export PATH=/usr/local/software/redis/bin:$PATH

# 另外一种方式

# export PATH=$PATH:/usr/local/software/redis/bin

:wq!保存退出

执行一下命令, 让配置立即生效

source ~/.bash.rc

方式四:

在~/.bash_profile文件中将redis的安装目录/usr/local/software/redis/bin添加到系统环境变量

vim ~/.bash_profile

# 在文件的最后一行追加上

export PATH=/usr/local/software/redis/bin:$PATH

# 另外一种方式

# export PATH=$PATH:/usr/local/software/redis/bin

:wq!保存退出

执行一下命令, 让配置立即生效

source ~/.bash_profile

方式五:

在/etc/bashrc文件中将redis的安装目录/usr/local/software/redis/bin添加到系统环境变量里)

vim /etc/bashrc

# 在文件的最后一行追加上

export PATH=/usr/local/software/redis/bin:$PATH

# 另外一种方式

# export PATH=$PATH:/usr/local/software/redis/bin

:wq!保存退出

执行一下命令, 让配置立即生效

source /etc/bashrc

方式六:

在/etc/environment文件中将redis的安装目录/usr/local/software/redis/bin添加到系统环境变量

vim /etc/environment

# 如果/etc/environment文件不可编辑,需要修改为可编辑

chmod -v u+w /etc/environment

#在文件的最后一行追加上

export PATH=/usr/local/software/redis/bin:$PATH

# 另外一种方式

# export PATH=$PATH:/usr/local/software/redis/bin

:wq!保存退出

执行一下命令, 让配置立即生效

source /etc/environment

7.2 关于环境变量的划分

可以简单的分成用户自定义的环境变量以及系统级别的环境变量。

用户级别环境变量定义文件:~/.bashrc~/.profile(部分系统为:~/.bash_profile

  • 系统级别环境变量定义文件:/etc/bashrc/etc/profile(部分系统为:/etc/bash_profile)、/etc/environment
  • 另外在用户环境变量中,系统会首先读取~/.bash_profile(或者~/.profile)文件,如果没有该文件则读取~/.bash_login,根据这些文件中内容再去读取~/.bashrc

7.3 Linux加载环境变量的顺序

/etc/environment > /etc/profile > /etc/bash.bashrc > /etc/profile.d/test.sh > ~/.profile > ~/.bashrc

更多linux环境变量的知识请参考博客:https://www.cnblogs.com/youyoui/p/10680329.html

你可能感兴趣的:(分布式,redis,缓存,数据库)