Redis主从架构和管道Lua(一)

Redis主从架构

架构

在这里插入图片描述

Redis主从工作原理

如果为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。master受到PSYNC命令,会在后台进行数据持久化通过bgsave生成最新的
RDB快照文件,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中,当持久化进行完毕以后,master会把这份RDB文件数据即发送给slave,slave会把接收到的
数据进行持久化生成RDB,然后再加载到内存中。然后master再将之前缓存在内存中的命令发送给slave/当master与slave之间的连接由于某些原因断开时,slave能够自动重连Master,如果master收到了多个
slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave.

主从复制(全量复制)流程图:

在这里插入图片描述

数据部分复制

当master和slave断开重连后,一般都会对整份数据进行复制。但从Redis2.8版本开始,Redis改用可以支持部分数据复制的命令PSYNC去master同步数据,slave与master能够在网络断开重连后只进行部分数据复制(断点续传).master会在其内存中创建一个复制数据用的
缓存队列,缓存最近一段时间的数,master和它所有的slave都维护了复制的数据下表offset和master的进程id,因此,当网络连接断开后,slave会请求master继续进行未完成的复制,从所记录的数据下标开始。如果master进程id变化了,后者从节点数据下标offset太旧,已经不在master的缓存队列里了,那么将会进行一次全量数据的复制
在这里插入图片描述

主从复制风暴

如果有很多从节点,为了缓解主从复制风暴(多个从节点同时复制主节点导致主节点压力过大),可以做如下架构
在这里插入图片描述

Redis哨兵高可用架构

sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点不会每次都通过sentinel代理访问redis的主节点,当redis的主节点发生变化,哨兵会第一时间感知到,并将新的redis主节点通知给client端(redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息)

在这里插入图片描述

管道与Lua脚本

管道(pipeline)

客户端可以一次性发送多个请求而不用等待服务器的相应,待所有命令都发送完后
再一次性读取服务的响应,这样可以极大地降低多条命令执行的网络传输开销,管道
执行多条命令的网络开销实际上只相当于一次命令执行的网络开销,需要注意到是用
pipeline方法打包命令发送,redis必须再处理完所有命令前先缓存起所有命令的处理
结果。打包的命令越多,缓存消耗内存也越多,所以并不是打包的命令越多越好。
pipeline中发送的每个command都会被server立即执行,如果执行失败,将会在
此后的响应中得到信息;也就是pipeline并不是表达"所有command都一起成功"的
语义,管道中前面命令失败,后面命令不会有影响,继续执行

Lua脚本

Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行,使用
脚本的好处如下:

  • 1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在
    Redis服务器上完成,使用脚本,减少了网络往返时延,跟管道类似
  • 2.源自操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入,管道不是原子的,
    redis的批量操作命令(类似mset)是原子的
  • 3.替代redis的事务功能:redis自带的事务功能很鸡肋,而redis的lua脚本几乎实现了常规的事务
    功能,官方推荐如果要使用redis的事务功能可以用redis lua替代
    A Redis script is transactional by definition, so everything you can do with a Redis transaction, you can also do with a script,and usually the script will be both simpler and faster.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/439193.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux阻塞与非阻塞IO简介

一. 简介 阻塞与非阻塞IO是Linux驱动开发中很常见的两种设备访问模式,在编写驱动的时候,一定要考虑到阻塞和非阻塞。 本文来学习一下,什么是 Linux下的阻塞与非阻塞IO访问。 二. Linux阻塞与非阻塞IO 这里的 “IO” 并不是我们学习 STM32…

[机器视觉]halcon十二 条码识别、字符识别之字符识别

[机器视觉]halcon十二 条码识别、字符识别之字符识别 流程 获取图像-》创建模型-》查找文本-》清除模型 效果 算子 create_text_model_reader : 创建文本模型 find_text : 查找文本 get_text_result :获取文本内容 set_text_model_param : 设置文本模板…

使用Pytorch导出自定义ONNX算子

在实际部署模型时有时可能会遇到想用的算子无法导出onnx,但实际部署的框架是支持该算子的。此时可以通过自定义onnx算子的方式导出onnx模型(注:自定义onnx算子导出onnx模型后是无法使用onnxruntime推理的)。下面给出个具体应用中的…

米酒生产加工污水处理需要哪些工艺设备

米酒生产加工过程中产生的污水是一项重要的环境问题,需要采用适当的工艺设备进行处理。下面将介绍一些常用的污水处理工艺设备。 首先,生产过程中的污水需要进行初级处理,常见的设备包括格栅和砂池。格栅用于去除污水中的大颗粒杂质&#xff…

python导出数据到sqlite中

import sqlite3# 数据 data [{username: 张三, age: 33, score: 13},{username: 李四, age: 44, score: 14},{username: 王五, age: 55, score: 15}, ]# 连接SQLite数据库(如果不存在则创建) conn sqlite3.connect(test.db)# 创建游标对象 cursor con…

神经网络8-注意力机制

注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。这种机制被称为注意力机制。举个例子来说,当我们观…

【排序算法】深入理解插入排序算法:从原理到实现

1. 引言 排序算法是计算机科学中的基本问题之一,它的目标是将一组元素按照某种规则进行排列。插入排序是其中一种简单但有效的排序算法,通过逐步构建有序序列来实现排序。本文将从原理、时间复杂度、应用场景、优缺点等方面深入探讨插入排序算法&#x…

keepalived原理以及lvs、nginx跟keeplived的运用

keepalived基础 keepalived的原理是根据vrrp协议(主备模式)去设定的 vrrp技术相关原理 状态机; 优先级0~255 心跳线1秒 vrrp工作模式 双主双备模式 VRRP负载分担过程 vrrp安全认证:使用共享密匙 keepalived工具介绍 keepal…

如何压缩图片大小到100kb以下?

如何压缩图片大小到100kb以下?不知道上班族小伙伴有没有发现,当我们工作中使用图片的时候经常遇到遇到一个尴尬的情况,例如我们需要网某个网站上传一张图片的时候,会被限制要求图片大小不能超过100kb,如果超过就无法进…

基于uniapp cli项目开发的老项目,运行报错path.replace is not a function

项目:基于uniapp cli的微信小程序老项目 问题:git拉取代码,npm安装包时就报错; cnpm能安装成功包,运行报错 三种方法尝试解决: 更改代码,typeof pathstring的话,才走path.replace…

JVM 面试题

1、什么情况下会发生栈内存溢出。 栈内存溢出通常发生在以下几种情况中: 函数递归调用过深: 当函数递归调用自身且没有合适的退出条件时,每次递归调用都会在栈上分配一个新的栈帧来存储局部变量、返回地址等信息。如果递归层次过多&#xff…

计讯物联山体滑坡地质灾害监测方案为灾区保驾护航

针对我国某些地区频繁爆发山体滑坡的情况,计讯物联深入调研滑坡体自动监测、无线通讯、险情预报等方面,自主研发反应快速高效、可广泛应用的山体滑坡地质灾害监测方案,全面掌握山体滑坡信息,为当地居民留有余裕的逃生时间。 计讯物…

Docker 配置阿里云镜像加速器

一、首先需要创建一个阿里云账号 二、登录阿里云账号 三、进入控制台 四、搜索容器镜像服务,并选择 五、选择镜像工具中的镜像加速 六 、配置镜像源 注意:有/etc/docker文件夹的直接从第二个命令开始

JavaSE-10(JDK8 新特性-万字总结)

新特性概述 Lambda 表达式函数式接口引用Stream API接口中的默认方法 / 静态方法新时间日期 API其他新特性 Lambda表达式/匿名函数 在 Java 中,匿名函数通常是指 Lambda 表达式。 Lambda 表达式允许你以一种简洁、紧凑的方式编写匿名函数,而不必创建…

Windows系统安装MongoDB并结合内网穿透实现公网访问本地数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

Zookeeper基础知识:成功分布式系统的关键

文章目录 一、引言二、Zookeeper介绍三、Zookeeper安装四、Zookeeper架构【重点】4.1 Zookeeper树形结构4.2 znode类型4.3 Zookeeper的监听通知机制 五、Zookeeper常用操作5.1 zk常用命令5.2 Java连接Zookeeper5.3 Java操作Znode节点5.4 监听通知机制 六、Zookeeper集群【重点】…

基于AI软件平台 HEGERLS智能托盘四向车机器人物流仓储解决方案持续升级

随着各大中小型企业对仓储需求的日趋复杂,柔性、离散的物流子系统也不断涌现,各种多类型的智能移动机器人、自动化仓储装备大量陆续的应用于物流行业中,但仅仅依靠传统的物流技术和单点的智能化设备,已经无法更有效的应对这些挑战…

【学习心得】websocket协议简介并与http协议对比

一、轮询和长轮询 在websocket协议出现之前,要想实现服务器和客户端的双向持久通信采取的是Ajax轮询。它的原理是每隔一段时间客户端就给服务器发送请求找服务器要数据。 让我们通过一个生活化的比喻来解释轮询和长轮询假设你正在与一位不怎么主动说话的老大爷&…

学习人工智能:吴恩达《AI for everyone》2019 第3周:实现智能音箱和自动驾驶的几个步骤;无监督学习;增强学习

吴恩达 Andrew Ng, 斯坦福大学前教授,Google Brain项目发起人、领导者。 Coursera 的联合创始人和联合主席,在 Coursera 上有十万用户的《机器学习》课程;斯坦福大学计算机科学前教授。百度前副总裁、前首席科学家;谷…

开发知识点-Apache Struts2框架

Apache Struts2 介绍S2-001S2CVE-2023-22530介绍 Apache Struts2是一个基于MVC(模型-视图-控制器)设计模式的Web应用程序框架,它是Apache旗下的一个开源项目,并且是Struts1的下一代产品。Struts2是在Struts1和WebWork的技术基础上合并出来的全新web框架,其核心是WebWork。…