redis的持久化:
1.1 什么是持久化?
把内存中的数据持久化到磁盘。这个过程就是持久化。 当
redis
启动时会从磁盘上读取数据并加载到内存。
1.2 持久化的好处
使
redis
宕机后数据不会丢失。
1.3 redis持久化的方式
1. RDB:
以快照的方式进行持久化。 在一定时间间隔内进行快照。把数据进行保存到磁盘。
2. AOF:
会把每次对
redis
的写操作命令追加到一个日志尾,当
redis
启动时则把该日志中的命令执行一遍
.
2 RDB的持久化方式。
2.1 save和bgsave的区别
save命令会阻塞当前
Redis
服务器,执行
save
命令期间,
Redis
不能处理其他命令,直到
RDB
过程完成为止。
执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式 显然不可取。
bgsave
执行该命令时,
Redis
会在后台异步进行快照操作,快照同时还可以响应客户端请求。
2.2 通过配置文件来触发RDB ----- bgsave命令
2.3恢复数据
可以把
dump.rdb
放入到
redis
启动目录下。 当
redis
再次被启动时则会加载该数据。
2.4 rdb持久化方式的优缺点
优点:
(1)RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
(2)bgsave生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘 IO操作。
(
3
)
RDB
在恢复大数据集时的速度比
AOF
的恢复速度要快。
缺点:
(1) 快照持久化期间修改的数据不会被保存,可能丢失数据。数据完整性比较差。
3.AOF持久化方式
提供一种更加高效的方式
AOF
,工作机制很简单,
redis
会将每一个收到的写命令都通过
write
函数追加到文件中。通俗的理解就是日志记录。
3.1AOF默认是没有开启。需要配置手动开启。(redis.conf)
3.2 什么时候会触发aof
当进行写操作则会把写的命令放入
appendonly.aof,可以查看里面的信息
3.3 aof的优缺点
优点:
(
1
)
AOF
可以更好的保护数据不丢失,一般
AOF
会每隔
1
秒,通过一个后台线程执行一次
fsync
操 作,最多丢失
1
秒
钟的数据。
(
2
)
AOF
日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。
(
3
)
AOF
日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
缺点:
(
1
)对于同一份数据来说,
AOF
日志文件通常比
RDB
数据快照文件更大
.
(2)
恢复数据时时间要比快照模式慢很多。
redis的集群 :
1 redis主从关系
2 如何搭建主从关系
准备三台机器 (
1
主节点
2
从节点) 为了节省资源 在一个虚拟机上启动三台
redis
只是它们的端口号不同
(其它两台也一样)
3 搭建主从的关系
1.
配从不配主
(
1
)配置
redis
配置文件
6380(
主
) 6381
(从)
6382
(从)
(
2
)修改
rdb
持久化文件的路径以及端口
分别连接不同的
redis
服务
检验上面上个
redis
服务之间的关系
上面三个redis
服务之间是没有任何主从关系。
可以通过以下命令设置
81,82 为 80 的从
输入上面命令后再查询某个节点的关系时 会出现如下结果
通过测试我们知道 主节点可以负责读写操作,但是从节点只能负责读操作。
如果主节点宕机了,那么从节点不会上位。还是等待主节点的归来。
如果新增一个从节点,该从节点会会和所有节点数据同步。
主从关系的缺点
:
如果主节点挂掉,则从节点无法上位,导致客户端无法进行写操作了。
4 搭建哨兵模式
如何设置哨兵模式
启动哨兵:
redis-sentinel sentinel.conf
测试让
80
宕机
shutdown
如果80端口重新开启,82接口已成为新的主节点了,那么80端口不会再是主节点,而是一个82接口的从节点。
5 redis集群搭建---去中心化
配置三主三从:
1. 7001 7002
2. 8001 8002
3. 9001 9002
对其中的相应变量进行修改:
为上面这些
redis
分配主从关系以及槽:
主节点后只有一个从节点:(前边三个写主,后边三个写从)
redis-cli --cluster create --cluster-replicas 1 192.168.67.129:7001 192.168.67.129:8001
192.168.67.129:9001 192.168.67.129:7002 192.168.67.129:8002 192.168.67.129:9002
==
必须保证
aof
开启,保证
redis
中没有数据。
==
客户端访问:
redis-cli -c -h 127.0.0.1 -p 7001