redis面试 第二则 怎么保证redis是高并发以及高可用的(理论为主)

昨天回顾到redis的过期策略今天继续

1、redis如何通过读写分离来承载读请求QPS超过 10+

要搞清这个问题可以从这个四个方面来弄

1、首先要知道redis高并发跟整个系统的高并发之间的关系

    要做高并发的话,不可避免的要把底层的缓存搞得很OK
    其实mysql也可以高并发,通过一系列复杂的分库分表,订单系统,
    事务要求的,QPS到几万,比较高了。要是做一些电商得商品详情页
    ,真正得超高并发(虽然我没经历过,但是也要见识下,做好准备)其实一秒钟几百万,光redis也是不够得,但是redis是整个大型得缓存架构中支撑高并发得重要环节。
复制代码

2、redis不能支撑高并发是因为什么?

    哈哈就是因为单机啊,俗话说双拳难敌四手
复制代码

3、假如redis要是支撑超过10万+得并发,应该怎么搞

    除去特殊情况,可以做一个主从架构得读写分离,先假设写得操作少大部分是读操作
看图
复制代码

 

 

 

   怎么实现呢可以了解下  redis得replication 主从复制功能
复制代码

2、redis replication 以及master初九话对主从架构得安全意义(其实最主要得就是复制)

上边说到了 redis replication这个东西

1、解释下redis replication原理吧

借用一下图,比较清楚,最基本得就是复制

 

 

 

2、redis replication的核心机制

    (1)redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量
    (2)一个master node是可以配置多个slave node的
    (3)slave node也可以连接其他的slave node
    (4)slave node做复制的时候,是不会block master node的正常工作的
    (5)slave node在做复制的时候,也不会block对自己的查询操作,它会用旧的数据集来提供服务; 但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了
    (6)slave node主要用来进行横向扩容,做读写分离,扩容的slave node可以提高读的吞吐量
    
    slave,高可用性,有很大的关系
复制代码

3、master持久化对于主从架构的安全保障的意义

    如果采用了主从架构,那么建议必须开启master node的持久化!
    
    不建议用slave node作为master node的数据热备,因为那样的话,如果你关掉master的持久化,可能在master宕机重启的时候数据是空的,然后可能一经过复制,salve node数据也丢了
    
    master -> RDB和AOF都关闭了 -> 全部在内存中
    
    master宕机,重启,是没有本地数据可以恢复的,然后就会直接认为自己IDE数据是空的
    
    master就会将空的数据集同步到slave上去,所有slave的数据全部清空
    
    100%的数据丢失
    
    master节点,必须要使用持久化机制
    第二个,master的各种备份方案,要不要做,万一说本地的所有文件丢失了; 从备份中挑选一份rdb去恢复master; 这样才能确保master启动的时候,是有数据的
复制代码

但是 这个时候还是有问题得,比如:

     即使采用了后续讲解的高可用机制,slave node可以自动接管master
     node,但是也可能sentinal还没有检测到master failure,master node就自动重启了,还是可能导致上面的所有slave node数据清空故障
复制代码

 

3、redis得主从复制原理、断点续传、无磁盘化复制、过期得key处理

1、主从架构得核心原理

当启动一个slave node得时候,他会发送一个PSYNC命令给master node,
如果这是一个slave node 重新连接 master node,这个时候master node仅仅会复制给slave部分缺少得数据,如果是第一次就触发一次full resynchronization(复制所有)
开始full resynchronization得时候,master会启动一个后台线程,开始生成一份RDB快照文件,同时还会将从客户端收到得所有写命令缓存在内存中。RDB文件完事后,slave就会收到这个文件,
slave会先把他给保存到本地得磁盘中,然后再从磁盘加载到内存中。
slave node如果跟master node有网络故障,断开了连接,会自动重连

假如master发现有多个slave都来重新连接,那么那个生成得RDB文件谁来连接就给谁一份。
复制代码

2、主从复制得断点续传

从redis 2.8开始,就支持主从复制得断点续传。

master node内存中有一个backlog,master 和 slave都会保存一个replica offset,海有一个master id。
offset就是保存在backlog中得。如果master和slave网络连接断掉了,slave会让master从上次得 replica offset开始继续复制。
当然如果没有找到,就是从头再来了
复制代码

3、无磁盘化复制

    master在内存中直接创建rdb,然后给slave,自己不会保存在本地磁盘中了
    所以这个时候 repl-diskless-sync-delay 这个配置就重要了,好不容易生成一个rdb,为啥不多等会看看slave还有没有再来连接得了
复制代码

4、过期key处理

    slave 不会过期key(只读哪有资格过期key)。如果master过期了key,或者通过LRU淘汰了一个key,这个时候就会模拟一条del命令发送给slave。
复制代码

.....后边还有,今天结束,明天继续

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值