大数据互联网架构阶段 Redis(二)

article/2025/3/18 22:13:28

Redis(二)

零 、 目录

  • 将缓存引入电商项目
  • 主从复制
  • 哨兵模式
  • 集群容忍度
  • CAP理论

十、 将缓存引入电商项目

  1. 使用Spring框架维护Jedis池对象

    1. 引入一个配置文件 application-redis.config

      <beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- 构建连接池配置信息 --><bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"><!-- 最大连接数 --><property name="maxTotal" value="${redis.maxTotal}" /></bean><bean id="jedisShardInfo1" class="redis.clients.jedis.JedisShardInfo"><constructor-arg index="0" value="${redis.node1.ip}" /><constructor-arg index="1" value="${redis.node1.port}"type="int" /></bean><!-- bean id="jedisShardInfo2" class="redis.clients.jedis.JedisShardInfo"><constructor-arg index="0" value="${redis.node2.ip}" /><constructor-arg index="1" value="${redis.node2.port}"type="int" /></bean><bean id="jedisShardInfo3" class="redis.clients.jedis.JedisShardInfo"><constructor-arg index="0" value="${redis.node3.ip}" /><constructor-arg index="1" value="${redis.node3.port}"type="int" /></bean--><!-- 定义集群连接池 --><bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"destroy-method="close"><constructor-arg index="0" ref="jedisPoolConfig" /><constructor-arg index="1"><list><ref bean="jedisShardInfo1" /><!--ref bean="jedisShardInfo2" /><ref bean="jedisShardInfo3" /--></list></constructor-arg></bean></beans>
      
  2. 需要加载配置文件 , 在application.xml(Spring核心配置文件中配置加载application-redis.xml中所需要的配置信息)

    redis.maxTotal=200
    redis.node1.ip=106.75.85.179
    redis.node1.port=6379
    redis.node2.ip=106.75.85.179
    redis.node2.port=6380
    redis.node3.ip=106.75.85.179
    redis.node3.port=6381
    
  3. 使用注解自动注入shardedjedidpool对象 , 即可使用 。

十一、 主从复制

  1. 当前redis结构可用性非常低, 当其中某个结点宕机之后 , 数据不可查 , 需要机器重启后才能恢复 。
  2. 解决不可用问题需要引入高可用的结构(高可用 , 即使宕机任然不影响当前功能)
  3. 具体实现 , 引入三台机器 , 将主节点的数据全部复制 。 (主从复制 , 数据备份)
  4. 当主节点(master)宕机之后 , 从节点(slave)能够顶替主节点来接收接下来的求情 , 这种结构就叫做高可用
  5. 分布式架构中 , 必不可少高可用特性
  6. 主从结构:
    1. redis可以提供主从复制的结构
    2. redis提供的主从结构支持多级复制
    3. 在redis中配置了主从结构之后 ,主节点的数据操作(赠 、 删 、 改)将实时同步到从节点中
    4. 操作:
      1. 准备主节点 、 从节点的配置文件
      2. 分别 编辑配置文件的bind(注掉) 、 port (不要与其他端口冲突即可) 、 protected-modo no 、 diamonize yes(后台守护) 、 pid文件 (pidfile_与端口对应 )
      3. 分别启动这三个redis文件对应的reids服务
      4. 再打开三个终端 , 分别开启redis客户端(redis-cli -p 端口号) 执行info replication , 查看信息
      5. 在客户端中操作 , 实现一主两从结构 6382(主) 、 6383 、 6384(从) , 需要在6383 、 和6384 的客户端执行 slaveof 127.0.0.1(主节点主机IP , 如果在同一台机器中 ,最好使用内网地址 ) 主节点端口
      6. 从节点挂接主节点完成之后 , 查看三个客户端的info replication信息中的role等信息 , 查看是否挂载成功
        1. 主节点信息
        2. 从节点信息

十二、 哨兵模式

  1. 完成上面的操作(构建一主两从结构)之后 , 测试该结构的高可用
    1. 把直接点kill(或在主节点的客户端shutdown)掉 , 查看某一个从节点是否主动担任了主节点的角色 , 并且将另一个从节点挂载在自己身上继续完成主从复制(主从结构的目的)
    2. 操作:
      1. 在主节点6382的客户端中执行shutdown , 模拟主节点宕机 ,
      2. 观察从节点的info replication , 发现角色并没有任何转变 , 高可用并没有启动
  2. 于是redis中引入了哨兵模式
  3. 哨兵是redis启动的进程 , 一个哨兵进程可以挂载一个主从的结构 , 来管理当前主从结构的高可用,多个哨兵进程可以挂载多个主从结构,多个哨兵可以挂载一个主从
  4. 哨兵进程通过连接主从执行info命令,判断当前主从结构是否正常,当发现主节点宕机,将会启动内部逻辑,将从节点中的slave-priority数值较高的节点启动替换主节点,将其他的从节点挂接到新的主节点上完成高可用主从替换
  5. 哨兵集群 启动后 , 整个架构就是高可用的最终模式
  6. 哨兵模式+主从复制的最终模式
  7. 操作步骤:
    1. 修改启动哨兵的配置文件 sentinel.cong
      1. bind注释掉 , 在测试中不需要绑定指定的ip , 任何ip都可以访问
      2. protected-mode no 关闭保护模式 (不需要密码了)
      3. 哨兵的默认端口是26379 , 我们这里使用三个哨兵做示例 , 所以使用26379 、 26380 、 26381 三个端口
      4. 修改监听主从的挂接配置
        1. sentinel monitor : 开始监听主从结构中的主节点
        2. mymaster : 给监听的主从结构起个名字
        3. ip : 主节点的所在的ip
        4. port : 主节点的端口号
        5. 2 : 哨兵启动后投票选举新的主节点的最少哨兵的数量 , 配置成1
      5. 修改选举新节点失败时的时间延迟(第一轮选举和第二轮选举的时间间隔)
      6. 复制配置好的哨兵配置文件 , 并修改哨兵自己的的端口 26380 、 26381
      7. 想要实现的效果:高可用结构启动之后 , 当主节点宕机之后 , 从节点主动变为主节点 。
      8. 开启需要监听的主从结构 , 开启所有哨兵进程 、 开始监听主从结构 开启命令: redis-sentinel 哨兵的配置文件
      9. 测试: shutdown掉主节点 , 看看哨兵是否启动高可用new-epoch :逻辑时间数 , 当前的日志步数
      10. 将宕机的主节点重启 , 发现哨兵将刚启动的旧的主节点作为现在的主节点的从节点提供服务
      11. 宕掉一个哨兵后再视图宕掉一个主节点 , 这时剩余的两个哨兵会进行投票选举 , 如果单个从结点投票过半 , 则被晋升为主节点 。
      12. 注意: 当原本只有两个哨兵时 , 宕掉一个之后 , 一个哨兵投票始终无法票数过半 ,导致陷入死循环 , 导致一直在投票 。所以最好启动奇数个哨兵
  8. 在Jedis中也是支持哨兵模式的 , api配置内容就从配置具体的redis信息,到配置哨兵的节点信息和端口,3.0以后的redis引入了集群的技术,导致哨兵的高可用不在单独使用集群里就包含了哨兵的高可用,包含了主从结构

十三、 集群容忍度:

  1. 选举过半原则导致 , 集群容忍度概念的引出

    2个哨兵,多少算过半(2个)--,允许宕机的个数0,集群容忍度0,
    3个哨兵,2个过半没允许,宕机的个数是1,容忍度1
    4个哨兵,3个过半,宕机个数允许1,容忍度1
    2n个选举法人,2n-1个选举法人的容忍度一样
    

十二、 CAP理论

  1. 随着数据量存储增长需求 , 业务的多元化 , 分布式结构必不可少 , CAP理论始终是分布式公认的基础理论之一。
  2. C : consistency(一致性)
  3. A : avalibility(可用性)
  4. P : partition(分区) – tolerence to paetition(分区容忍度)
  5. 分区:
    1. 一个系统中 , 多个系统组成网络本来应该是互通的, 但是可能因为某种原因导致某两个或某几个结点间的数据通信断开 , 导致整个系统被分割成为了几个独立的数据区域(分区) 。 分区是一种常态 。
    2. 当分区出现时 , 就需要考虑数据的一致性 。
  6. 一致性:
    1. 数据在某个查看的时间点上保持整体一致
    2. 如果在修改数据时 , 对于查看数据的客户端要求数据一致 , 则必须加锁 , 实现数据整体性
    3. 如果在修改数据时 , 对弈查看数据的客户端不要求数据一致 , 则没有体现数据的一致性
  7. 分区容忍度:
    1. 如果对数据一致性要求高的话 , 分区容忍度高 , 一致性需要执行(即加锁)
    2. 如果对数据一致性要求低 , 则分区容忍度低
    3. 如果要求数据一致性高(加锁)的查看数据的人 , 在一段时间(修改数据的一段时间)内无法进行查看数据
  8. 可用性:
    1. 请求在一段时间都有回应(请求时立即返回请求数据)
  9. 总结:
    1. 分区是常态(始终是存在的) , 而一致性和可用性相互矛盾 只能满足其一 , 不可能达到三者共存的状态 。
    2. cp理论: 分区容忍度高, 数据一致性高 , 可用性降低
    3. ap理论: 分区容忍度低 , 数据一致性低, 可用性提升
    4. 分区导致一致性的要求 , 要求高 , 可用性低 ,要求低 , 可用性高 。
  10. 随中数据量存储增长的需求 , 数据多元化

问题: 使用Jedis连接之前是否需要先打开redis客户端?


http://chatgpt.dhexx.cn/article/5lceWP7F.shtml

相关文章

大数据下Redis的应用

大数据下Redis的应用 1、Redis客户端区别 1.1 redis常用客户端 目前市面上比较流行的客户端有jedis、lettuce、redisson •jedis jedis客户端连接方式是基于TCP阻塞方式 •lettuce lettuce内部是基于netty的多路复用异步非阻塞方式&#xff08;目前业界解决高并发大数据的问…

redis互联网真实应用场景

Redis 1.数据类型&#xff08;5种&#xff09; String、hash、list、set、zset 2.常用命令 2.1 String 分布式锁 SETNX 当别的进程枷锁后 讲不能获得锁 利用INCR来产生分布式序列号&#xff0c;优化策略&#xff1a;一下拿出多个序列号到服务器本地&#xff0c;之后在服务器…

大规模互联网应用Redis架构要点(转)

通常&#xff0c;为了提高网站响应速度&#xff0c;总是把热点数据保存在内存中而不是直接从后端数据库中读取。Redis是一个很好的Cache工具。大型网站应用&#xff0c;热点数据量往往巨大&#xff0c;几十G上百G是很正常的事儿&#xff0c;在这种情况下&#xff0c;如何正确架…

Redis 为什么在互联网应用中广泛应用?

1. redis 都能干嘛 缓存&#xff0c;毫无疑问这是Redis当今最为人熟知的使用场景。再提升服务器性能方面非常有效&#xff1b;排行榜&#xff0c;在使用传统的关系型数据库&#xff08;mysql oracle 等&#xff09;来做这个事儿&#xff0c;非常的麻烦&#xff0c;而利用Redis…

从 Redis7.0 发布看 Redis 的过去与未来

前言 经历接近一年的开发、三个候选版本&#xff0c;Redis 7.0终于正式发布&#xff0c;这是Redis历史上改变最多的一个大版本&#xff0c;它不仅包含了50多个新命令&#xff0c;还有大量核心新特性与改进&#xff0c;这些不仅能够解决用户使用中的诸多问题&#xff0c;还进一…

Redis简介

​强烈推荐一个大神的人工智能的教程&#xff1a;http://www.captainai.net/zhanghan 【前言】 组长反复提到系统加载的慢性能有待提高&#xff0c;正好这两天任务都提前完成&#xff1b;于是乎开始着手研究Redis&#xff1b;经过两天的研究将Redis应用到了系统中并做了相关的…

旅游专题图制作

一 数据源 从网上下载的全国各行政区域矢量图层、福建省九市矢量边界图、福建省公路矢量图、福建省河流矢量图、福建省铁路矢量图&#xff0c;其中&#xff0c;它们的投影坐标系为WGS84投影坐标系以及福建省2018旅游景点图。 二&#xff0e;专题地图设计过程 1.打开Arcgis 10…

使用Arcgis制作的专题地图

使用Arcgis制作的专题地图 一、数据准备二、简单制作1. 将数据拉入图层2. 切换视图3. 插入标题4. 插入图例5. 插入指北针6. 插入比例尺 三、精细制作1. 插入文本2. 插入动态文本3. 调整元素4. 调整符号5. 开启格网 五、结果图六、导出地图 一、数据准备 自己准备数据 二、简单…

ArcGIS Pro 专题图制作

基于昨天已经符号化好的地图基础之上&#xff0c;今天主要操作一下专题图制作。ArcGIS Pro中专题图制作和Map中已经有了很大的改动&#xff0c;只要能够习惯ArcGIS Pro制图的方式&#xff0c;那制作的专题图比Map还是更加漂亮的&#xff0c;因为它提供的元素样式&#xff0c;文…

ArcGIS 10.5专题地图制作自定义漂亮图框

先来看一下效果: 下面来说明如何在ArcGIS软件里面实现自定义图框。 1. 【自定义】→【样式管理器】→【Administrator.style】→【边框】→【新建】→【常规边框】。 2. 点击【更改符号】。 3. 点击【编辑符号】。

利用envi与arcmap/arcgisPro制作一张植被覆盖指数专题地图(地图学作业)

利用envi与arcmap/arcgisPro制作一张植被覆盖指数专题地图&#xff08;地图学作业&#xff09; 前言数据准备利用envi进行数据处理Lc8数据的打开辐射定标图像裁剪大气校正Band Math获取NDVI计算植被覆盖指数 ArcMap or ArcGIS Pro成图导入tif文件并将其可视化 前言 本篇文章是…

ArcGIS制作专题地图

终于制出我想要的效果地图了 一顿摸索 从昨天到现在 呵呵 功夫不负有心人 特别是九段线数据框 因为完全是自己摸索 还是小小激动下 也记录一下 上图

QGIS创建专题地图

支持创建多种专题图&#xff0c;单符号专题图、分类专题图、渐进专题图&#xff08;数值分段&#xff09;、自定义规则专题图等、热力图、汇聚图、2.4D三维图&#xff1b;以分类专题图制作为例&#xff0c;操作如下&#xff1a; 制作专题地图 选择符号页签&#xff1b;2.选择…

如何制作专题地图集

你可能看到过类似下图的地图&#xff0c;作为一个GISer&#xff0c;有没有想过这些图是怎么做出来的。对ArcMap也很熟悉了&#xff0c;但是看到这些地图&#xff0c;第一感觉是用PS或是AI做的。即使ArcMap可以做出这些图&#xff0c;也是一个很麻烦的过程&#xff0c;或许Pytho…

ArcGIS应用基础4 专题图的制作

&#x1f388;&#x1f388;&#x1f388;本文数据免费下载 &#x1f3af;&#x1f3af;&#x1f3af;其他GIS空间分析文章 本次实验数据基于上次实验3结果进行处理&#xff0c;文章见ArcGIS应用基础3 人口密度图的制作 一、实验名称 ArcGIS应用基础之专题图的制作 二、实验目…

(附word操作以及视频讲解)使用ARCGIS进行地图配准_投影变换_普通地图制作_专题地图制作

目录 1、这里需要说明的是&#xff0c;视频是由成都信息工程大学龙银平老师制作&#xff0c;Word是由本人编辑。 2、外加 实验指导书 3、链接&#xff1a;https://pan.baidu.com/s/1XgULO8zy5fqlbC1aUXSiLg 提取码&#xff1a;Love 4、部分成果展示&#xff1a; 5. 普通地…

如何制作专题地图(设计、规划、测绘制作图斑)标绘使用详解

同步视频教程&#xff1a;制作专题地图-设计规划测量地图应用详解-Bigemap GIS Office 专题地图制作视频教程&#xff1a;地图数据应用&#xff08;地形图制作过程&#xff09;-Bigemap GIS Office 1、导入/导出AutoCAD文件DXF格式 2、在线标注含有 点 线 面 的矢量标注&#x…

专题地图符号设计与构图

专题地图符号设计是地图编制与可视化的重点内容之一。 一、符号设计应遵循的原则 符号设计应遵循多种原则&#xff0c;包括图案化、精确性、逻辑性、系统性、对比性和协调性、色彩的象征性、视力与制印条件、印刷与经济效果和计算机制图的需要等。 图案化 地图符号图形的设计…

SuperMap iDesktop 9D 制作专题地图

1.打开SuperMap iDesktop 9D SuperMap iDesktop 9D可以在官网下载 官网&#xff1a;https://www.supermap.com/cn/ 或者 使用百度网盘下载 链接&#xff1a;https://pan.baidu.com/s/1m4ZE_d-jcvG_IgOetcU3QQ 提取码&#xff1a;v446 复制这段内容后打开百度网盘手…

ENVI_IDL: 批量制作专题地图

目录 1. 提要 2. 编程 1. 提要 ————————————————————————————————————————————————————————————————————————————————————————————————————————————————…