• Redis


    问题:为什么Redis能这么快?

    ---》

    1、完全基于内存,绝大部分请求是纯粹的内存操作,执行效率高

    2、数据结构简单,对数据操作也简单

    3、采用单线程,单线程也能处理高并发请求,想多核也可启动多实例

    (为什么redis要采用单线程这个设计呢?)

    ---》准确来说,redis的单线程结构是指主线程是单线程的,主线的处理包括IO事件处理,IO对应业务请求的处理,除外还负责过期键的处理,父子协调,集群协调等。这些任务都会被封装成周期性任务,由主线程周期性地处理。正因为采用了单线程的设计,对于客户端的所有请求,都由一个主线程串行地执行,因此多个客户端对同一个键进行些操作的时候呢,就不会有并发的问题,避免了频繁的上下文的切换,和锁竞争。所有redis的执行效率高。

    4、使用多路I/O复用模型,非阻塞IO

    问题:单线程的可以处理高并发的请求吗?

    -----》

    CPU并不是制约redis的性能瓶颈,而是网络传输会影响redis的性能

    可以在多核的机器上启动多个redis实例,充分利用多核特性

    如何配置redis主从,如何配置redis哨兵。如何配置redis集群。

    问题:redis的主从同步机制?

    ----》

    为了实现弱一致性,就是说保证最终一致性(过一段时间,所有的节点数据都是一致的),也就是说不需要保证master和slave是事时同步的。

    (简洁版)redis可以使用主从同步,也可以使用从从同步,第一次同步时,master会做一次bg save,并将后续的操作记录到后续的buffer中,完成之后,将master的rdb文件发送到从节点上,从节点接受完成后呢,就将rdb的镜像加载到内存中,加载完成后,再通知master将期间的操作(则增量数据)同步到slave中。这样就完成整个主从同步的过程!!!

    (简单来说,master 先把自己的所有数据拷贝一次,发给slave节点,slave加载完这部分之后,叫master把增量数据也发过来,这样把增量数据补上了)

    (详细版)有全同步过程

    1、Slave发送sync命令到Master

    2、Master会启动一个后台进程,将Redis中的数据快照保存到文件中(bg save)

    3、master 将保存数据快照期间接受到的写命令缓存起来

    4、master完成写文件操作后,将该文件发送给slave

    5、使用新的RDB文件替换掉旧的RDB文件

    6、master将这期间收集的增量写命令发送给slave端 

    增量同步过程

    1、master接收到用户的操作指令,判断是否需要传播到slave

    2、将操作纪律追加到AOF文件

    3、将操作传播到其他slave:1、对齐主从库;2、往响应缓存写入指令

    4、将缓存中的数据发送给slave

    主从模式的弊端是什么呢?

    ---》这个架构不是高可用性,当master挂了之后,就不能对外服务。

    所以有了redis sentinel 哨兵机制

    问题:解决主从同步master宕机后额主从切换问题:

    redis sentinel 有以下几点功能:

    1、监控:检查主从服务器是否运行正常

    2、提醒:通过API向管理员或者其他应用程序发送故障通知

    3、自动故障迁移:主从切换

    哨兵机制是怎样做到的呢?

    ---》是一个分布式系统,可以在一个架构中运行多个sentinel,这些进程是使用流言协议,来接受master是否下线的信息 ,并使用投票协议来决定是否执行自动故障迁移,以及确定用哪个从服务器作为主服务器,这个类似zookeeper

    流言协议 Gossip

    在杂乱无章中寻求一致

    1、每个节点都随机地与对方通信,最终所有节点的状态达成一致

    2、种子节点定期随机向其他节点发送节点列表以及需要传播的消息

    3、不保证信息一定会传递给所有节点,但是最终会趋于一致

  • 相关阅读:
    如何修改ls命令列出来的目录颜色
    如何替换vi的配色方案
    grep如何结尾匹配
    机器学习模型如何转换成零依赖代码
    在ubuntu bionic下对基于qemu的arm64进行linux内核5.0.1版本的编译和运行
    分析linux内核中的slub内存管理算法
    windows下如何解决chrome浏览器左下角总提示'Downloading proxy script'的问题
    发现vi出现此错误~/.vim/bundle/YouCompleteMe/third_party/ycmd/ycm_core.so: undefined symbol: clang_getCompletionFixIt
    打开vi后提示The ycmd server SHUT DOWN (restart with :YcmRestartServer)该如何处理
    ubuntu下如何修改时区和时间
  • 原文地址:https://www.cnblogs.com/vingLiu/p/10673446.html
Copyright © 2020-2023  润新知