zoukankan      html  css  js  c++  java
  • 大数据基础---Redis集群分布式学习

    Redis是什么?

    官方介绍:

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU缓存(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和集群自动 分区(Cluster)提供高可用性(high availability)。

    一句话总结:Redis是一个支持多种类型的内存数据库,它可以实现分布式高可用.

    BSD许可:是加州大学推出的开源协议,使用软件必须原作者许可证。

    数据库:是按照数据结构来组织,存储和管理数据的仓库。

    字符串:比如 "hello world"就是一个字符串

    散列:比如e10adc3949ba59abbe56e057f20f883e就是根据MD5进行加密得到的哈希值。

    列表:比如List<String> list=new ArrayList<String>();这就是一个列表。

    集合:比如Set<String> list=new HashSet<String>();这就是一个集合

    有序集合:比如SortedSet<String> sortedSet=new TreeSet<String>();

    关于ArrayList,HastSet,SortedSet的区别,我写了个Demo,参考: https://www.cnblogs.com/shuai7boy/p/12467318.html

    复制:指的是主从复制。

    LUA脚本:是采用C语言编写的用来扩展应用的一种脚本。

    LRU缓存:是一个选择最近很少使用的页面进行淘汰的算法。

    磁盘持久化:将内存中的 数据持久化到磁盘。

    哨兵:监控服务器运行情况,当检测到某台服务器长时间没回应,则让备份服务器去替代它。

    自动分区:把数据自动分发到多台服务器。

    高可用:一台服务器挂掉,可以有备份服务器来顶上去。

    集群是什么?

    让多台电脑处理同一个逻辑就叫做集群,一起办大事哈哈哈~

    集群有几个术语需要了解下:

    主从架构:

     主从架构

    主备架构:

     主备架构

    按槽位取模:

      Redis按槽取模原理

    无主模式:

     无主模式

    脑裂:

     脑裂示意图

    分布式是什么?

    把一个逻辑进行拆分,分发到不同机器上执行叫做分布式,分担你点任务哈哈哈~

    比如上面讲到的按槽位取模就属于分布式,这个是分布式存储。另外我们玩的英雄联盟,你的大招,需要的皮肤,播放的音效就有可能是多台机器提供的,这个就分担了计算能力。 包括我们知道的 阿法狗下围棋,也是一个集群一起运算的,一台机器再牛逼,也赶不上一群服务器,人多力量大~

    Redis集群架构

    Redis Sentinel(Redis 哨兵)为Redis提供高可用性。实际上,这意味着使用Sentinel可以创建Redis部署,该部署可以在没有人工干预的情况下抵抗某些类型的故障。

    Redis Sentinel还提供其他附带任务,例如监视,通知,并充当客户端的配置提供程序。

    这是宏观上Sentinel功能的完整列表(即,大图):

    • 监控。Sentinel会不断检查您的主实例和副本实例是否按预期工作。
    • 通知。Sentinel可以通过API通知系统管理员或其他计算机程序,其中一个受监视的Redis实例出了问题。
    • 自动故障转移。如果主服务器未按预期工作,则Sentinel可以启动故障转移过程,在该过程中将副本升级为主服务器,将其他附加副本重新配置为使用新的主服务器,并通知使用Redis服务器的应用程序要使用的新地址。连接时。
    • 配置提供程序。Sentinel充当客户端服务发现的授权来源:客户端连接到Sentinels,以询问负责给定服务的当前Redis主服务器的地址。如果发生故障转移,Sentinels将报告新地址。

    这是一个非常简单的设置,其优点是易于调整以提高安全性。它基于三个框,每个框同时运行Redis进程和Sentinel进程。

           +----+
           | M1 |
           | S1 |
           +----+
              |
    +----+    |    +----+
    | R2 |----+----| R3 |
    | S2 |         | S3 |
    +----+         +----+
    

    如果主M1发生故障,则S2和S3将就该故障达成协议,并能够授权故障转移,从而使客户端能够继续。

    在每个Sentinel设置中,由于Redis使用异步复制,因此始终存在丢失某些写入的风险,因为给定的已确认写入可能无法到达被提升为主服务的副本。但是,在上述设置中,由于客户端被旧的主服务器分区,因此存在较高的风险,如下图所示:

             +----+
             | M1 |
             | S1 | <- C1 (writes will be lost)
             +----+
                |
                /
                /
    +------+    |    +----+
    | [M2] |----+----| R3 |
    | S2   |         | S3 |
    +------+         +----+
    

    Redis持久化

    首先持久化什么意思?持久化就是使用一定策略记录内存中有什么。

    为什么会有持久化?因为Redis操作的数据一般都是放在缓存的,但是为了保证服务器宕机重启数据不丢失,采用了一定策略保存数据,也叫持久化。

    Redis提供了两种持久化方式,一种是RDB,一种是AOF。

    RDB是根据你设定的固定时间点或者多少秒执行依次来持久化数据,并且新的持久化文件会覆盖掉老的文件。文件名默认是dump.rdb。

    AOF是默认每秒记录你做了哪些操作,这个相当于一个日志记录,默认日志名是appendonly.aof。

    等重启的时候会根据dump.db或者appendonly.aof将数据恢复到内存。

    上面是我针对集群分布式和Redis的一些理解,具体操作可以参考Redis官网

    另外推荐一篇我认为不错的博客

    系列传送门

  • 相关阅读:
    Python 字典
    CentOS6.8部署MongoDB集群及支持auth认证
    Python 字符串
    Ubuntu下部署GitLab-——基于14.04系统
    Python 用户登录程序
    设计模式之美学习-快速改善代码质量(十三)
    SpringMvc源码阅读View之JstlView如何渲染视图(十)
    SpringMVC源码阅读ViewResolver如何处理ContentNegotiatingViewResolver(九)
    SpringMVC源码阅读RequestMappingHandlerAdapter如何处理Handle(八)
    SpringMVC源码阅读HandlerAdapter初始化-RequestMappingHandlerAdapter(七)
  • 原文地址:https://www.cnblogs.com/shun7man/p/12469764.html
Copyright © 2011-2022 走看看