Redis
-
Redis为什么这么快
- 单线程、 IO复用
-
因为 Redis 是基于内存的操作,CPU 不会成为 Redis 的瓶颈,而最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了。
-
Redis的过期策略
redis如何设置过期时间 :expire key time 字符串有独有的设置过期时间的方式 setex(key, int time ,value)
-
定时删除
设置过期时间的同时设置一个定时器,定时的去删除这个数据
-
惰性删除
对某个数据进行操作时,判断key是否过期,过期即删除它,在进行对应的命令处理
-
定期删除
每隔一段时间定时的进行key检查,如果过期则删除
redis默认使用 惰性删除 + 定期删除
-
-
持久化文件对过期key的处理
- 过期key是不会写入持久化文件的,同时数据恢复时也会进行过期严重
-
redis的淘汰机制
- 默认机制:不再接受写入请求,直接返回错误
- 从所有的key中随机删除部分数据
- 从过期的key中随机删除部分数据
- 删除剩余过期时间最短的数据
-
Redis持久化的优劣
-
RDB:以快照的方式将数据写入二进制文件进行持久化保存
自动触发条件:900s内数据发生过至少一次的变化、300s内数据发生过至少10次的变化、60s内数据发生过至少10000次的变化
-
优
fork一个子线程进行持久化的操作,不影响主线程的业务操作fork子线程的过程中,会阻塞主线程
文件紧凑,全量备份,适合数据备份和容灾恢复
支持异步操作,不需要主线程进行IO操作,影响效率
RDB在恢复大数据集时速度快于AOF
-
缺
在持久化期间修改的数据不会被保存,存在数据丢失的风险啊
-
-
AOF
将每一个写命令都追加到AOF文件中 触发方式:每次操作都会触发、每秒触发一次、从不触发
-
优
最大可能的降低数据丢失的风险
文件过大时,进行重写操作时,不会影响客户端的读写
适合做灾难性的误删数据的紧急恢复
-
缺
数据量大的情况下,数据恢复对于RDB来说性能较低
-
-
-
redis的集群模式
-
主从模式
-
一主多从,一主一从、级联结构
一主多从多用于读写分离,数据的复制可能会产生性能瓶颈,可采用多层的级联结构分担数据复制的压力(但会影响数据的实时性)
-
redis的主从数据同步策略
全量复制 和 增量复制 一主多从 模式下,当多个slave节点断线重启后,会同时去链接master节点,导致master节点的IO突增,从而发生宕机的情况
全量复制 1、slave连接master节点,发送SYNC命令 2、master节点收到后,执行bgsave命令,生成RDB文件,在此期间收到命令通过缓冲区记录 3、将RDB文件发送给slave,在发送过程中可继续执行写命令 4、slave收到快照文件后丢弃所有旧数据,进行RDB恢复 5、master发送完毕后,接着发送缓冲区的写命令 6、slave恢复快照文件完成后,开始接收缓冲区命令,进行写入操作 7、slave在执行完以上操作后,开始接受用户的读命令 增量复制 增量复制就是在slave节点完成全量复制的数据初始化操作,开始正常工作之后。master会将每次的写操作都同步至slave节点执行,保持数据的一致性
-
-
-
哨兵模式
哨兵模式是为了应对当mster节点宕机导致不可预测的异常发生而出现的
- 作用
1、监控所有的redis节点是否在正常工作 2、当mster节点宕机后,从slave节点中通过投票机制选出新的master节点 * 多个哨兵之间也会进行相互的监控- 任务
监控:监控master节点与slave节点之间的连接是否正常 通知:当监控的某个redis出现异常时,通过API向管理员或其他应用程序发送通知 故障转移:当某个master出现问题后,哨兵会根据机制从slave中设定一个新的master,并让其余的slave节点都去连接新的master节点,当客户端试图连接故障的master节点时,也会返回一个新的master节点地址,让客户端去链接-
缺点
在master的重新选举过程中,整个服务集群处于不可用状态
-
\