持久化
Redis是内存数据库,如果不保存的话,断电就会丢失数据。具体配置在redis.conf的SNAPSHOTTING一节。
RDB(Redis DataBase)
配置中默认的是RDB模式,文件保存配置为
dbfilename dump.rdb
触发rdb的情况
- 执行flushall命令
- 退出Redis
- 备份命令
AOF(Append Only File)
redis记录写操作(读操作不记录),redis重启的话就根据日志文件的内容写入。默认不开启。
appendonly no
改为yes就开启了
aof文件出错,使用redis-check-aof来进行修复(有一定的错误率,可能会丢失数据)
redis-check-aof --fix appendonly.aof
RDB和AOF的区别
rdb与aof的区别
比较项 | RDB | AOF |
启动载入优先级(两种都开启了) | 低 | 高 |
体积 | 小 | 大 |
恢复速度 | 快 | 慢 |
数据完整性 | 丢数据 | 更完整 |
轻重 | 重 | 轻 |
备份与恢复
备份
save或bgsave命令
恢复
将dump.db放到dir中,重启服务即可
主从复制
概述
主从复制,是指将一台Regis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
主从复制的作用主要包括:
1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
4、高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
一般来说,要将Redis运用于工程项目中,只使用一台Redis是万万不能的,原因如下:
1、从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;
2、从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所有内存用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G。
环境配置
配置从库即可
使用命令
info replication
查看当前信息
我们就在一个虚拟机中模拟一下
复制三份配置文件,修改
- 端口
- pid
- log文件名字
- rdb名字
redis-server 配置文件路径
redis-cli -p 端口号
查看进程
ps -ef | grep redis
slaveof ip 端口
使用上述命令,在从机(6781、6782)配置它的主机(6780)
127.0.0.1:6382> slaveof 127.0.0.1 6380
OK
主机
可以看到两个从机
某一从机
配置文件中配置,找到以下行,取消注释,修改主机ip和端口即可,启动后默认为从机。
replicaof
主机有密码的话可以再配置一下
#masterauth
实验1:主机设置,从机获取
主机设置值
127.0.0.1:6380> set lady killer9
OK
从机获取值
127.0.0.1:6381> get lady
“killer9”
从机设置值
127.0.0.1:6381> set k1 v1
(error) READONLY You can’t write against a read only replica.
可以看到,从机不能设置值
实验2:主机断开,从机读取
主机关闭
127.0.0.1:6380> shutdown
not connected>
从机
127.0.0.1:6382> get lady
“killer9”
从机信息显示主机关闭,主机之前设置的值仍然可以读取
实验3:谋朝篡位
主机断开,需要快速恢复业务,可以通过
slaveof no one
来使从机变为主机,进行写操作,就是设置key
127.0.0.1:6381> slaveof no one
OK
主从复制原理
Slave启动成功连接到master 后会发送一个sync同步命令Master 接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步但是只要是重新连接master,一次完全同步(全量复制)将被自动执行!
哨兵模式
实际生产环境中还是需要进行自动配置的,也就是主机宕机,从机自动选择一个作为主机。
配置
sentinel.conf
sentinel monitor myredis 127.0.0.1 6380 1
名字myredis叫什么无所谓哈
启动
redis-sentinel sentinel.conf
实验:主机宕机,哨兵选举
关闭主机
127.0.0.1:6380> shutdown
not connected>
稍等一会儿,查看哨兵进程
哨兵监控之后,进行了投票,选举6382的redis作为主节点