目录
(3) 通过配置文件来触发RDB ----- bgsave命令
1.redis的持久化
(1)什么是持久化?
把内存中的数据持久化到磁盘。这个过程就是持久化。 当redis启动时会从磁盘上读取数据并加载到内存。
(2)持久化的好处
Redis作为分布式缓存架构中重要的一环,用于保存一些较为重要的数据,抗住系统的高并发访问。因此Redis中的数据必须持久化,防止服务或系统宕机导致数据丢失。
(3)redis持久化的方式
1. RDB: 以快照的方式进行持久化。 在一定时间间隔内进行快照。把数据进行保存到磁盘。
2. AOF: 会把每次对redis的写操作命令追加到一个日志尾,当redis启动时则把该日志中的命令执行一遍.
2.RDB的持久化方式
(1)什么时候会触发RDB. ----默认dump.rdb
1. save命令
2. bgsave命令
3. 配置redis配置文件。
(2) save和bgsave的区别
该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。
bgsave执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。
(3) 通过配置文件来触发RDB ----- bgsave命令
(4) 恢复数据
可以把dump.rdb放入到redis启动目录下。 当redis再次被启动时则会加载该数据。
(5) rdb持久化方式的优缺点
优点:
(1)RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
(2)bgsave生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
(3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。缺点:
快照持久化期间修改的数据不会被保存,可能丢失数据。数据完整性比较差。
3. AOF持久化方式
提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。
(1)AOF默认是没有开启。需要配置手动开启。
(2) 什么时候会触发aof
当进行写操作则会把写的命令放入appendonly.aof
(3) aof的优缺点
优点:
(1)AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据。
(2)AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。
(3)AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
缺点:
(1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大.
(2) 恢复数据时时间要比快照模式慢很多。
4. redis的集群
(1) redis主从关系
(2) 如何搭建主从关系
准备三台机器 (1 主节点 2 从节点) 为了节省资源 在一个虚拟机上启动三台redis 只是他们的端口号不同。
(3) 搭建主从的关系
1.配从不配主
(1)配置redis配置文件 6380(主) 6381(从) 6382(从)
(2)修改rdb持久化文件的路径以及端口
分别为80 81 82
分别连接不同的redis服务
上面三个redis服务之间是没有任何主从关系。
可以通过以下命令设置 81 82 跟随80混
输入上面命令后再查询某个节点的关系时 会出现如下结果
通过测试我们知道 主节点可以负责读写操作,但是从节点只能负责读操作。
思考:
如果主节点宕机了,那么从节点会不会上位。还是等待老大的归来。[等待老大归来]
如果新增一个从节点,该从节点会从当前增加的不会添加数据还是会和所有节点数据同步?【同步】
主从关系的缺点:
- Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复
- 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性
(4)搭建哨兵模式
如何设置哨兵模式
启动哨兵
redis-sentinel sentinel.conf
测试让80宕机 shutdown
思考:
如果80回来了,老大会是谁?(答案如下图)
(5)redis集群搭建---去中心化
配置三主三从
1. 8001 8002
2. 7001 7002
3. 9001 9002
port 8001
bind 0.0.0.0
daemonize yes
appendonly yes 必须有aof持久化
# 开启集群
cluster-enabled yes 833行
# 集群的配置文件,该文件自动生成
cluster-config-file nodes-8001.conf 841行
# 集群的超时时间
cluster-node-timeout 5000 847行
其他上面这些端口号的redis
为上面这些redis分配主从关系以及槽。
#主节点后只有一个从节点
redis-cli --cluster create --cluster-replicas 1 192.168.223.128:7001 192.168.223.128:8001 192.168.223.128:9001 192.168.223.128:7002 192.168.223.128:8002 192.168.223.128:9002
==必须保证aof开启,保证redis中没有数据。==
客户端访问:
redis-cli -c -h 127.0.0.1 -p 8001