文章目录
- 第1章 实践环境介绍和前期规划
- 1.1 操作系统的基本环境
- 1.2 操作系统的基本优化
- 1.3 Redis部署前期规划
- 1.4 Redis软件安装部署
- 第2章 Redis 6379实例部署[基于RDB持久化]
- 2.1 Redis 6379实例部署步骤
- 2.2 Redis 6379实例启停脚本
- 2.3 Redis 6379实例连接方式
- 2.4 看看Redis 6379是啥角色
- 2.5 RDB持久化相关知识总结
- 2.6 RDB持久化的相关图集
- 第3章 Redis 6380实例部署[基于AOF持久化]
- 3.1 Redis 6380实例部署步骤
- 3.2 Redis 6380实例启停脚本
- 3.3 Redis 6380实例连接方式
- 3.4 看看Redis 6380是啥角色
- 3.5 AOF持久化相关知识总结
- 3.6 AOF持久化相关的图集
第1章 实践环境介绍和前期规划
1.1 操作系统的基本环境
#### 系统版本
[root@node21 ~]# cat /etc/redhat-release;uname -r;uname -m;
CentOS Linux release 7.5.1804 (Core)
3.10.0-862.el7.x86_64
x86_64
#### ssh的端口
[root@node21 ~]# netstat -lntup|grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 884/sshd
tcp6 0 0 :::22 :::* LISTEN 884/sshd
#### 内存和磁盘挂载情况
[root@node21 ~]# free -h
total used free shared buff/cache available
Mem: 3.7G 116M 3.5G 8.9M 115M 3.4G
Swap: 4.0G 0B 4.0G
[root@node21 ~]#
[root@node21 ~]# df -h|grep -w "data"
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 100G 54M 100G 1% /data
#### 服务器网卡及其IP地址
[root@node21 ~]# ifconfig ens33|awk -F " " 'NR==2{print $2}'
10.0.0.21
[root@node21 ~]# ifconfig ens34|awk -F " " 'NR==2{print $2}'
172.16.1.21
1.2 操作系统的基本优化
#### 关闭selinux和firewalld防火墙
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
firewall-cmd --state
#### 调整资源描述符
# 这是修改全局下
cat >>/etc/security/limits.conf<<EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
* soft stack 65535
* hard stack 65535
EOF
# 针对操作系统系统下用户级别
echo " * - nproc 65535" >/etc/security/limits.d/20-nproc.conf
echo "session required pam_limits.so" >>/etc/pam.d/login
# 退出当前连接后,重新连接
[root@node21 ~]# ulimit -n
65535
#### 内核方面的优化
chattr -i /etc/sysctl.conf
cat >>/etc/sysctl.conf<<EOF
vm.swappiness=10
net.core.somaxconn=2048
vm.overcommit_memory=1
EOF
sysctl -p
#### 禁用大内存交互
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo 'echo never >/sys/kernel/mm/transparent_hugepage/enabled ' >> /etc/rc.local
1.3 Redis部署前期规划
#### 软件的部署位置
/data/apps/redis # 这是个软链接文件,指向的是/data/apps/redis-4.0.14目录
#### 6379实例的部署位置
/data/redis/6379 # 该目录下部署Redis 6379实例
/data/redis/6379/conf # 存放redis 6379实例的配置文件
/data/redis/6379/data # 存放redis 6379实例的持久化数据
/data/redis/6379/logs # 存放redis 6379实例的日志文件
/data/redis/6379/run # 存放redis 6379实例的pid和socket文件
/data/redis/6379/script # 存放redis 6379实例的启停脚本
#### 6380实例的部署位置
/data/redis/6380 # 该目录下部署Redis 6380实例
/data/redis/6380/conf # 存放redis 6380实例的配置文件
/data/redis/6380/data # 存放redis 6380实例的持久化数据
/data/redis/6380/logs # 存放redis 6380实例的日志文件
/data/redis/6380/run # 存放redis 6380实例的pid和socket文件
/data/redis/6380/script # 存放redis 6380实例的启停脚本
1.4 Redis软件安装部署
#### 创建redis用户(需要设置密码,需要远程登录,需要有家目录,不要让其用户和密码过期)
#### redis服务不要使用操作系统的root用户来启动,存在安全的问题;
chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow
useradd redis && echo "redis"|passwd --stdin redis
#### 安装相关的依赖包
chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow
yum -y install gcc gcc-c++ make
rpm -qa install gcc gcc-c++ make
#### 创建相关的目录
mkdir /data/apps
ls -ld /data/apps/
#### 上传软件包,进行安装
ll redis-4.0.14.tar.gz
tar xf redis-4.0.14.tar.gz
cd redis-4.0.14
make PREFIX=/data/apps/redis-4.0.14 install
#### 做软链接并更改属主/组
ln -sv /data/apps/redis-4.0.14/ /data/apps/redis
chown -R redis:redis /data/apps/redis/
ls -ld /data/apps/redis/
#### 配置环境变量
01:vim /etc/profile.d/redis.sh文件,在里面输入以下内容并进行保存退出
export PATH=/data/apps/redis/bin:$PATH
02:加载 /etc/profile.d/redis.sh文件,并查看相关命令
source /etc/profile.d/redis.sh
echo $PATH
which redis-cli redis-server
第2章 Redis 6379实例部署[基于RDB持久化]
2.1 Redis 6379实例部署步骤
#### 创建redis 6379实例的相关目录
mkdir /data/redis/6379/{conf,data,logs,run,script} -p
tree /data/redis/6379
#### 为redis 6379实例准备配置文件
cat >>/data/redis/6379/conf/redis.conf<<EOF
## Basic parameters
bind 172.16.1.21
protected-mode yes
port 6379
maxmemory 1GB
requirepass chenliang
daemonize yes
databases 16
syslog-enabled no
loglevel notice
logfile /data/redis/6379/logs/redis.log
pidfile /data/redis/6379/run/redis.pid
unixsocket /data/redis/6379/run/redis.sock
dir /data/redis/6379/data/
## Client
maxclients 10000
timeout 300
tcp-backlog 511
tcp-keepalive 60
## RDB Persistence
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
rdbcompression yes
rdbchecksum yes
stop-writes-on-bgsave-error no
EOF
#### 查看配置文件以及配置文件说明
ll /data/redis/6379/conf/redis.conf
2.2 Redis 6379实例启停脚本
Redis服务的启停方式
#### 注意:
redis服务不要用root用户来启动,用普通用户来启动,在安装创建了普通用户redis
#### 启动方式
第一种:redis-server /data/redis/6379/conf/redis.conf # 文件中的daemonize得等于yes
第二种:redis-server /data/redis/6379/conf/redis.conf & # 不用管daemonize是不是yes
#### 停止方式(-a表示指定redis实例的密码,shutdown表示关闭)
第一种:redis-cli -h 172.16.1.21 -p 6379 -a chenliang shutdown
第一种:redis-cli -s /data/redis/6379/run/redis.sock -a chenliang shutdown
我编写的redis启停脚本的思路
01:脚本中没有限制只能某个用户来启动,例如:root
02:但脚本的属主/组都是redis用户(可远程登录、有密码、永不过期的)
03:脚本中的启动方式:redis-server /data/redis/6379/conf/redis.conf
04:脚本中的停止方式:redis-cli -s /data/redis/6379/run/redis.sock -a chenliang shutdown
日常我是怎么来启动redis实例的呢?
01:我编写的脚本是如何加入开机自启动的呢?
A:在/etc/rc.local文件中添加 su - redis PATH/脚本 start
B:在开机启动时,root切换到redis后(不需要密码)再执行执行 PATH/脚本 start
C:启动起来的redis服务是用redis用户来启动的
03:平时使用这个脚本来启停redis服务?
A:正常的情况下,就是说脑袋清醒的状态下;
a:没处于服务器的redis用户
b:找到相应的脚本,然后启动
c:启动后的redis服务是用redis这个普通用户来启动的;
B:非正常情况下,就是说手里活比较多,忙起来了
a:没有处于服务器的redis用户下,比如在超级用户root下;
b:找到相应的脚本,然后就直接启动了;
c:启动后,redis服务就是用root用户来启动的了(不安全,且日志文件的属主/组也是root)
你下一次,用redis启动时,会提示没有相应的权限写入日志文件;
d:其实是有办法解决的,虽然有办法解决,但又存在安全问题(不可兼得)
e:所以你记住在启动服务时,一定要在redis用户下去启动(可以交互式,也可非交互式)
#### redis 6379实例的启动脚本
01:vi /data/redis/6379/script/redisd 文件,按i键,进入编辑模式
02:复制 博客的脚本内容
03:把复制的内容粘贴至/data/redis/6379/script/redisd文件中,按esc键后,输入:wq保存退出
04:给脚本上加可执行权限:chmod 700 /data/redis/6379/script/redisd
#### 更改/data/redis/6379目录及目录下所有文件的属主/组为redis
chown -R redis:redis /data/redis/6379
ls -ld /data/redis/6379/
#### 启动redis 6379实例【我是在root用户下】
[root@node21 ~]# su - redis /data/redis/6379/script/redisd start
上一次登录:四 10月 15 18:25:42 CST 2020pts/0 上
Start redis[6379] service [ 确定 ]
[root@node21 ~]#
[root@node21 ~]# lsof -i :6379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 4966 redis 6u IPv4 25156 0t0 TCP node21:6379 (LISTEN)
#### 加入开机自启动
[root@node21 ~]# echo -ne "\n# Boot start redis service[6379]. USER:chenliang TIME:$(date +%F)\nsu - redis /data/redis/6379/script/redisd start\n" >>/etc/rc.local
[root@node21 ~]#
[root@node21 ~]# chmod 755 /etc/rc.d/rc.local
[root@node21 ~]#
[root@node21 ~]# tail -2 /etc/rc.local
# Boot start redis service[6379]. USER:chenliang TIME:2020-10-15
su - redis /data/redis/6379/script/redisd start
2.3 Redis 6379实例连接方式
#### 用监听的IP和端口连接(连接时指定密码,我配置文件中事先设置好的)
[root@node21 ~]# redis-cli -h 172.16.1.21 -p 6379 -a chenliang
172.16.1.21:6379>
172.16.1.21:6379> exists key1 # 判断key1是否存在,0表示不存在
(integer) 0
172.16.1.21:6379>
#### 用监听的IP和端口连接(连接时不指定密码,我配置文件中事先设置好的)
[root@node21 ~]# redis-cli -h 172.16.1.21 -p 6379
172.16.1.21:6379>
172.16.1.21:6379> exists key1 # 判断key1是否存在,提示需要进行认证
(error) NOAUTH Authentication required.
172.16.1.21:6379>
172.16.1.21:6379> auth chenliang # 进行密码认证
OK
172.16.1.21:6379>
172.16.1.21:6379> exists key1 # 判断key1是否存在,0表示不存在
(integer) 0
#### 用socket进行连接(连接时指定密码,我配置文件中事先设置好的)
[root@node21 ~]# redis-cli -s /data/redis/6379/run/redis.sock -a chenliang
Warning: Using a password with '-a' option on the command line interface may not be safe.
redis /data/redis/6379/run/redis.sock>
redis /data/redis/6379/run/redis.sock> exists key1
(integer) 0
2.4 看看Redis 6379是啥角色
Redis任何一个单实例,它的角色默认是master。
172.16.1.21:6379> info replication
# Replication
role:master # 角色:master
connected_slaves:0 # 连接slave个数:0
master_replid:414c8302c9996957b1f70921c72e7d2e1dde3a33
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
2.5 RDB持久化相关知识总结
01:RDB持久化默认是没有开启的(即你的配置文件中没有RDB的相关参数,启动后你用config get
save是空的,这就表示是没有开RDB持久化)。那么是不会进行自动进行RDB持久化的,且在关闭
Redis服务时也不会进行最终的RDB持久化。
02:RDB持久化是可以在线进行开启的(开启后,会根据设置的条件进行自动RDB持久化,在关闭Redis
时也会进行最终的RDB持久化)。
A:在线开启RDB持久化
a:config set save "900 1" # 设置1条规则,配置文件中加上save 900 1
b:config set save "60 2 30 2" # 设置2条规则,配置文件加上save 60 2 换行 save 30 2
B:在线修改RDB持久化条件
a:config get save # 查看其是否开启,如果是开启(假如结果是60 2 30 2)
b:config set save "20 2" # 这是将两条规则修改成了一条规则了
C:在线关闭RDB持久化
config set save "" # 即表示关闭RDB持久化,不会自动RDB持久化了
03:当开启了RDB持久化后,会根据条件(假如条件是:20 1),即在20秒内有1个key被改变,就进行
RDB持久化。在持久化时是使用bgsave命令for出后台线程来完成RDB持久化,这样不会影响
redis仅有的一个主进程继续响应客户端的操作。
04:RDB持久化是可以手动触发的,即使用bgsave和save命令;这也是有些人说RDB默认是开启的。
A:不用管RDB是否开启(以在线的结果为准,不管save参数是否有值)
B:bgsave命令for出后台线程完成RDB持久化,不阻塞Redis的主进程继续响应客户端;
C:save命令就是使用redis的主进程来完成RDB持久化的数据;
05:RDB持久化的数据体现是dump.rdb文件(这是由dbfilename参数决定的,默认值就是它),该文件
是不可直接查看和编辑的,持久化时是先生成一个dump.rdb.tmp文件,然后再替换dump.rdb文件。
06:RDB持久化的数据(dump.rdb文件)要比实际数据要小,因为它是打快照,且会进行压缩,
07:RDB持久化时是后台的子进程来工作,若在持久化数据过程中,出现了错误(例如磁盘满了或损坏
了),Redis的主进程是否还接受客户端的操作呢?这个其实是redis服务的另一个参数来让其决
定,该参数是stop-writes-on-bgsave-error,默认是yes,也就是redis主进程不响应客户端的写
操作;建设设置成no,则表示继续响应客户端的读写操作;
08:redis服务在启动时是根据什么来找RDB持久化的呢?答案是:只要在启动时,redis的配置文件中
有开启AOF(即appendonly yes)持久化,那么都只会找AOF持久化数据进行加载,不会找RDB持久化
数据。换句话说:启动时redis配置文件中没开AOF(没有appendonly参数,或者appendonly no)
持久化,不管有没有RDB相关参数(save),都只会找RDB持久化的数据。
09:当在大数据集的时候,RDB持久化的数据在加载或恢复时要比AOF持久化的要快;但在RDB和AOF
同时开启的情况下,加载数据只会加载AOF的持久化数据
10:RDB持久化不能做到实时或秒级的数据持久,因此对数据有实时持久化的需求下,RDB持久化就不太适合了;
2.6 RDB持久化的相关图集
第3章 Redis 6380实例部署[基于AOF持久化]
3.1 Redis 6380实例部署步骤
#### 创建redis 6380实例的相关目录
mkdir /data/redis/6380/{conf,data,logs,run,script} -p
tree /data/redis/6380
#### 为redis 6380实例准备配置文件
cat >>/data/redis/6380/conf/redis.conf<<EOF
## Basic parameters
bind 172.16.1.21
protected-mode yes
port 6380
maxmemory 1GB
requirepass chenliang
daemonize yes
databases 16
syslog-enabled no
loglevel notice
logfile /data/redis/6380/logs/redis.log
pidfile /data/redis/6380/run/redis.pid
unixsocket /data/redis/6380/run/redis.sock
dir /data/redis/6380/data/
## Client
maxclients 10000
timeout 300
tcp-backlog 511
tcp-keepalive 60
## AOF Persistence
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
EOF
#### 查看配置文件
ll /data/redis/6380/conf/redis.conf
3.2 Redis 6380实例启停脚本
Redis服务的启停方式
##### 注意:
redis服务不要用root用户来启动,用普通用户来启动,在安装创建了普通用户redis
#### 启动方式
第一种:redis-server /data/redis/6380/conf/redis.conf # 文件中的daemonize得等于yes
第二种:redis-server /data/redis/6380/conf/redis.conf & # 不用管daemonize是不是yes
#### 停止方式(-a表示指定redis实例的密码,shutdown表示关闭)
第一种:redis-cli -h 172.16.1.21 -p 6380 -a chenliang shutdown
第一种:redis-cli -s /data/redis/6380/run/redis.sock -a chenliang shutdown
我编写的redis启停脚本的思路
01:脚本中没有限制只能某个用户来启动,例如:root
02:但脚本的属主/组都是redis用户(可远程登录、有密码、永不过期的)
03:脚本中的启动方式:redis-server /data/redis/6380/conf/redis.conf
04:脚本中的停止方式:redis-cli -s /data/redis/6380/run/redis.sock -a chenliang shutdown
日常我是怎么来启动redis实例的呢?
01:我编写的脚本是如何加入开机自启动的呢?
A:在/etc/rc.local文件中添加 su - redis PATH/脚本 start
B:在开机启动时,root切换到redis后(不需要密码)再执行执行 PATH/脚本 start
C:启动起来的redis服务是用redis用户来启动的
03:平时使用这个脚本来启停redis服务?
A:正常的情况下,就是说脑袋清醒的状态下;
a:没处于服务器的redis用户
b:找到相应的脚本,然后启动
c:启动后的redis服务是用redis这个普通用户来启动的;
B:非正常情况下,就是说手里活比较多,忙起来了
a:没有处于服务器的redis用户下,比如在超级用户root下;
b:找到相应的脚本,然后就直接启动了;
c:启动后,redis服务就是用root用户来启动的了(不安全,且日志文件的属主/组也是root)
你下一次,用redis启动时,会提示没有相应的权限写入日志文件;
d:其实是有办法解决的,虽然有办法解决,但又存在安全问题(不可兼得)
e:所以你记住在启动服务时,一定要在redis用户下去启动(可以交互式,也可非交互式)
#### redis 6380实例的启动脚本
01:vi /data/redis/6380/script/redisd 文件,按i键,进入编辑模式
02:复制 博客的脚本内容
03:把复制的内容粘贴至/data/redis/6380/script/redisd文件中,按esc键后,输入:wq保存退出
04:执行sed -i 's#6379#6380#g' /data/redis/6380/script/redisd 命令进行替换内容;
05:给脚本上加可执行权限:chmod 700 /data/redis/6380/script/redisd
#### 更改/data/redis/6380目录及目录下所有文件的属主/组为redis
chown -R redis:redis /data/redis/6380
ls -ld /data/redis/6380/
#### 启动redis 6380实例【我是在root用户下】
[root@node21 ~]# su - redis /data/redis/6380/script/redisd start
上一次登录:四 10月 15 18:25:42 CST 2020pts/0 上
Start redis[6379] service [ 确定 ]
[root@node21 ~]#
[root@node21 ~]# lsof -i :6380
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 5094 redis 6u IPv4 25156 0t0 TCP node21:6380 (LISTEN)
#### 加入开机自启动
[root@node21 ~]# echo -ne "\n# Boot start redis service[6380]. USER:chenliang TIME:$(date +%F)\nsu - redis /data/redis/6380/script/redisd start\n" >>/etc/rc.local
[root@node21 ~]#
[root@node21 ~]# chmod 755 /etc/rc.d/rc.local
[root@node21 ~]#
[root@node21 ~]# tail -2 /etc/rc.local
# Boot start redis service[6380]. USER:chenliang TIME:2020-10-15
su - redis /data/redis/6380/script/redisd start
3.3 Redis 6380实例连接方式
#### 用监听的IP和端口连接(连接时指定密码,我配置文件中事先设置好的)
[root@node21 ~]# redis-cli -h 172.16.1.21 -p 6380 -a chenliang
172.16.1.21:6380>
172.16.1.21:6380> exists key1 # 判断key1是否存在,0表示不存在
(integer) 0
172.16.1.21:6380>
#### 用监听的IP和端口连接(连接时不指定密码,我配置文件中事先设置好的)
[root@node21 ~]# redis-cli -h 172.16.1.21 -p 6380
172.16.1.21:6380>
172.16.1.21:6380> exists key1 # 判断key1是否存在,提示需要进行认证
(error) NOAUTH Authentication required.
172.16.1.21:6380>
172.16.1.21:6380> auth chenliang # 进行密码认证
OK
172.16.1.21:6380>
172.16.1.21:6380> exists key1 # 判断key1是否存在,0表示不存在
(integer) 0
#### 用socket进行连接(连接时指定密码,我配置文件中事先设置好的)
[root@node21 ~]# redis-cli -s /data/redis/6380/run/redis.sock -a chenliang
Warning: Using a password with '-a' option on the command line interface may not be safe.
redis /data/redis/6380/run/redis.sock>
redis /data/redis/6380/run/redis.sock> exists key1
(integer) 0
3.4 看看Redis 6380是啥角色
Redis任何一个单实例,它的角色默认是master。
172.16.1.21:6380> info replication
172.16.1.21:6380> info replication
# Replication
role:master # 角色:master
connected_slaves:0 # 连接的slave:0个
master_replid:2623b1d6538a3d2f1aee5ae8f7db8c970278c4b1 # 复制ID:随便生成的
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
3.5 AOF持久化相关知识总结
01:AOF持久化默认是关闭了的,即配置文件中没有appendonly yes,在线用config get appendonly
查看的结果为no,那么不会进行自动AOF持久化,在关闭Redis服务时也是不会进行AOF的最终持久
02:AOF持久化是可以在线开启的,即使用config set appendonly "yes",这样就会进行自动AOF持久
化,在关闭Redis服务时,也会进行AOF的最终持久化;
03:只要开启AOF持久化,即AOF自动持久化的条件是everysec策略(由appendfsync参数决定)
everysec # fsync每秒只进行一次。妥协。
always # fsync在每次写入append only日志后执行。缓慢的,安全的。
no # 不要fsync,让操作系统在需要的时候刷新数据。得更快。
04:AOF持久化的数据到磁盘体现是appendonly.aof文件,是由appendfilename参数决定的,默认就是
它。当redis产生数据时,会把命令追加到appendonly.aof文件尾部,这人文件是可以直接查看和
编辑的,这个文件始终只有一个,随着着数据的增加,该文件的大小也会增加。
05:那么如何解决AOF持久化文件过大,redis为AOF持久化提供了重写功能(手动或自动),示例说明;
# 通过举例理解什么是AOF的重写
A:你添加一个key(set key01 "chenliang"),此时这条命令被追加到持久化文件尾部;
B:往key01中追加数据(append key01 "lili"),此时这条命令被追加到持久化文件尾部;
C:Redis服务中key01的数据为chenlianglili,AOF持久化文件中保留了两条命令;
D:此时你手动执行bgrewriteaof命令,让其后台进行重写,重写后的AOF文件中对于key01
的数据就只有一条命令了(set key01 "chenlianglili");
# Redis何时自动触发第一次AOF的重写呢?
当AOF的文件达到参数auto-aof-rewrite-min-size设置的大小时,默认是64mb。
自动在for出一个后台子进程来完成重写的工作,此时会占用额外的内存哈;
# Redis何时会自动触发第二次AOF的重写呢?
A:当AOF文件达到64mb(假如auto-aof-rewrite-min-size设置的就是64mb哈)时
AOF自动触发重写,重写完成后,AOF的持久化文件为60mb;
B:那么Redis第二次自动触发的就得根据auto-aof-rewrite-percentage设置的
值(百分比)来决定。假如是100,就得等AOF文件达到120mb时再自动触发重写;
C:以此类推哈;
# 有些误操作会把AOF文件内容全部清除(不是说直接清空AOF持久化文件哈)
A:在线执行了flushall命令,redis内存中的数据全部没有了(所有库下的数据)
B:如果你开了AOF持久化,AOF文件中还有,但前面执行的flushall命令在AOF文件尾部;
C:如果你又执行了bgrewriteaof命令,这时会进行重写,因内存中没有数据了,AOF文件也空了;
06:Redis在启动时是根据什么去找AOF持久化文件的,这个得看redis的配置文件中是否开了AOF,
如果开了AOF,那么只会找AOF持久化的数据进行加载,不会找RDB持久化的数据,反之。
07:redis在恢复或加载AOF持久化的数据时,遇到可能存在问题的指令时,是否继续;其实是由
aof-load-truncated参数决定的,默认值是yes,表示发现现错误时继续执行后面的数据
3.6 AOF持久化相关的图集