1.Redis数据持久化
Redis有两种数据持久化策略
RDB:
定期将Redis中生成的数据生成快照同步到磁盘,磁盘上保存的就是Redis的快照
优点:数据文件相比AOP较小 ,使用RDB数据恢复较快
缺点:数据容易丢失,比较耗时
AOF:
将Redis中所执行过的命令都记录下来,下次重启Redis直接执行命令就可以
优点 :数据丢失的风险降低
缺点:数据文件相比较RDB较大,数据恢复较慢
在项目中持久配置是如何选择的:
RDB + AOF
2.1 Redis的集群
在Redis中 提供集群的方案共有三种:
1.主从同步 :
1).保证高可用
2).实现故障转移需要手动调节
3).无法实现海量数据存储
2. 哨兵模式:
1).保证高可用
2).实现故障转移自动调节
3).无法实现海量数据存储
3.分片集群
1).保证高可用
2).实现故障转移自动调节
3).可以实现海量数据存储
2.2 什么是Redis的主从复制
主从第一次同步:全量同步
第一阶段:全量同步流程
1). 从节点执行replicaof命令,发送自己的replid 和 offset 到主节点
2).主节点判断replid是否一致
3).如果不一致说明是第一次连接,需要做全量同步,返回自己的replid和offset到从节点
4).主节点执行bgsave命令,生成RDB文件
5).主节点发送RDB文件
6).从节点清除本地的数据,加载RDB文件中的数据
7).在同步期间,主节点收到的新命令写入到缓冲区【repl_buffer】中
8). 从节点接收到的缓冲数据后写入本地,并记录最新数据对应的offset
9).后期采用增量同步
后期数据变化后,则执行增量同步
增量同步:
1.主节点会不断吧自己接收到的命令记录在repl_baklog中,并修改offset
2.从节点向主节点发送psync命令,发送自己的offset和replid
3.主节点判断replid和offset与从节点是否一致
4.如果replid一致,说明是增量同步,然后判断offset是否一致
5.如果从节点offset小于主节点offset,并且在repl_baklog中能找到对应数据则将offset直接相差的数据发送到从节点
6.从节点接收到数据后写入本地,修改自己的offset与主节点一致
增量同步的风险:
repl_baklog文件大小有限,写满后会覆盖最早的数据,如果slave断开的时间过长,会导致没有备份的数据被覆盖,此时就需要做全量同步了(repl_baklog可以在配置文件中修改存储大小)
3.说说项目中使用Redis是集群还是单点?那些集群?Redis又是怎么部署的
一般部分服务做缓存的Redis直接做主从(1主1从)加哨兵就可以了,单节点不超过10G内存,如果Redis内存不足则可以给不同服务分配独立的Redis主从节点,尽量不去做分片集群
原因:
1.维护起来麻烦