Memcached/redis是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web等应用的速度、 提高可扩展性。

缓存服务器作用: 加快访问速度 ,缓解数据库压力

1. memcached(单节点在用)

1.1 特点

1.内置内存存储方式-----------为了提高性能,memcached中保存的数据都存储在memcache内置的内存存储空间中。由于数据仅存在于内存中,重启操作系统会导致全部数据消失
2.简单key/value存储---------------服务器不关心数据本身的意义及结构,存储项由“键、过期时间、可选的标志及数据”四个部分组成;     可以设置过期时间
3.不互相通信的分布式 -------------  memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢? 这完全取决于客户端的实现。---首先向memcached中添加“tokyo”。将“tokyo”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。服务器选定后,即命令它保存“tokyo”及其值。 独立的

 Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议

1.2 原理

1、检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作,路径操作为①②③⑦。
2、如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现),路径操作为①②④⑤⑦⑥。

1.3 缺点

存储的数据类型单一,而且数据只能存储在内存中。无法实现数据的持久化,服务器重启,数据将消失

2. redis服务

redis是一个开源的、使用C语言编写的、可基于内存也可持久化的Key-Value数据库,采用单线程基于epoll模型实现IO多路复用非阻塞的处理模式。  性能高

2.1 redis的特点:

1.丰富的数据结构  -----Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合:有序和无序)及zset(sorted set:有序集合)等数据结构的存储
2.支持持久化
3.支持主从、集群、哨兵    功能多
4.性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s。   适合数据大
5.pub/sub模式的发布、订阅消息队列服务器

2.2 redis和memcache区别

1).Redis不仅仅支持简单的k/v类型的数据,同时还提供了list,set,zset,hash等数据结构的存储 
2).Redis支持master-slave(主-从)模式应用 
3).Redis支持数据的持久化
4).Memcached是多线程,非阻塞IO复用的网络模型,而redis单线程基于epoll模型实现IO多路复用的处理模式

3. redis的数据持久化

数据持久化:即把数据保存到可永久保存的存储设备中(如磁盘)

3.1 redis持久化 – 两种方式

RDB(默认)(Redis DataBase)和    AOF(Append Only File)

RDB(Redis DataBase):是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;快照是以文件的形式存在
特点:
1.周期性
2.不影响数据写入    RDB会启动子进程,备份所有数据。当前进程,继续提供数据的读写。当备份完成,才替换老的备份文件
3.高效     一次性还原所有数据
4.完整性较差,有数据丢失的可能   由于拍快照是有周期性的,当拍快照时发生故障了,所以恢复到故障点到上一次的备份,到下次备份之间的数据无法恢复

AOF(Append Only File)则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来保存到文件中,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
特点:
1.实时性
2.完整性较好
3.体积大  
记录数据的指令,删除数据的指令都会被记录下来。文件体积大

RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高

如何选择方式?
缓存:不用开启任何持久方式
双开:因RDB数据不实时,但同时使用两者时服务器只会找AOF文件,所以RDB留作万一的手段。
官方的建议是两个同时使用。这样可以提供更可靠的持久化方案。
写入速度快 ------------AOF
写入速度慢 ------------RDB

4. redis主从配置

像MySQL一样,redis是支持主从同步的,而且也支持一主多从以及多级从结构。主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承担。redis的主从同步是异步进行的

4.1 主从同步原理

主从 – 同步原理
从服务器会向主服务器发出SYNC指令(请求同步),当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作,也就是将主服务器的数据写入RDB文件中。在数据持久化期间,主服务器将执行的写指令都缓存在内存中。
在BGSAVE指令执行完成后,主服务器会将持久化好的RDB文件发送给从服务器,从服务器接到此文件后会将其存储到磁盘上,然后再将其读取到内存中。这个动作完成后,主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器。

另外,要说的一点是,即使有多个从服务器同时发来SYNC指令,主服务器也只会执行一次BGSAVE,然后把持久化好的RDB文件发给多个从服务器。

BGSAVE指令:
在后台异步(Asynchronously)保存当前数据库的数据到磁盘。
BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。

5. redis-sentinel---哨兵模式

Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中是Redis官方推荐的高可用性解决方案

5.1 作用

1):检测Master状态
2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave 
Master-Slave切换后,sentinel的监控目标会随之调换 

5.2 工作模式

1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令 

2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值,则这个实例会被 Sentinel 标记为主观下线。 

3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。 

4):当有足够数量(看定义的哨兵数)的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 

主从转移

ps:quorum 的值一般设置为哨兵个数的二分之一加1,例如 3 个哨兵就设置 2。

5.3 主观下线和客观下线

主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。 
客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN  判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master  Server下线判断,然后开启failover

如何故障转移?

前面说过,为了更加“客观”的判断主节点故障了,一般不会只由单个哨兵的检测结果来判断,而是多个哨兵一起判断,这样可以减少误判概率,所以哨兵是以哨兵集群的方式存在的。

那么问题来了,由哨兵集群中的哪个节点进行主从故障转移呢?

这时候,还需要在哨兵集群中选出一个 leeder,让 leeder 来执行主从切换。选举 leeder 的过程其实是一个投票的过程,在投票开始前,肯定得有个「候选者」。

那谁来作为候选者呢?


哪个哨兵节点判断主节点为「客观下线」,这个哨兵节点就是候选者,所谓的候选者就是想当 Leader 的哨兵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86019.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86019.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86019.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【stm32】标准库学习——I2C

目录 一、I2C 1.I2C简介 2.MPU6050参数 3.I2C时序基本单元 二、I2C外设 1.I2C外设简介 2.配置I2C基本结构 3.初始化函数模板 4.常用函数 一、I2C 1.I2C简介 本节课使用的是MPU6050硬件外设 2.MPU6050参数 3.I2C时序基本单元 这里发送应答是指主机发送,即…

HSA22HSA29美光固态芯片D8BJVC8BJW

HSA22HSA29美光固态芯片D8BJVC8BJW 美光固态芯片D8BJVC8BJW系列:技术革新与行业应用深度解析 一、技术解析:核心架构与创新突破 美光D8BJVC8BJW系列固态芯片(如MT29F8T08EQLEHL5-QAES:E、MT29F512G08CUCABH3-12Q等)的技术竞争力…

【Linux网络与网络编程】06.应用层协议HTTP

前言 虽然应用层协议是我们程序猿自己定的,但实际上已经有大佬们定义了一些现成的又非常好用的应用层协议供我们直接参考使用,HTTP(超文本传输协议)就是其中之一。 在互联网世界中,HTTP(HyperText Transfer Protocol&#xff0c…

磁悬浮轴承的“生死线”:磁轴承气隙与保护轴承气隙的可靠性设计

在高速旋转机械的尖端领域,磁悬浮轴承(AMB)凭借无摩擦、超高转速、免润滑等优势傲视群雄。然而,其核心参数——气隙的设置,尤其是额定工作气隙与保护轴承(辅助轴承)气隙之间的大小关系与具体数值…

QT 学习笔记摘要(一)

第一节 QT介绍 1. QT概述 简单来说,QT就是一个跨平台的客户端技术,HTML画网页一样,而QT就是画客户端的,它不仅可以绘制界面而且可以做单机应用开发,还可以做网络程序的客户端界面开发 更专业的说法是:Qt 是…

QCustomPlot 叠加对象(Overlay Items)

QCustomPlot 提供了一系列可以在图表上叠加显示的对象(items),这些对象不属于数据本身,而是用于标注、辅助线等用途。以下是主要叠加对象的详细说明和使用方法。 1. QCPItemStraightLine (无限直线) 特性: 无限延伸的…

Flink源码阅读环境准备全攻略:搭建高效探索的基石

想要深入探索Flink的底层原理,搭建一套完整且适配的源码阅读环境是必经之路。这不仅能让我们更清晰地剖析代码逻辑,还能在调试过程中精准定位关键环节。接下来,结合有道云笔记内容,从开发工具安装、源码获取导入到调试配置&#x…

Dify,FastGPT,RagFlow有啥区别,在智能问答方面有啥区别

Dify、FastGPT、RagFlow都是当前非常流行的低代码AI应用开发平台,它们都专注于让用户能够快速构建AI应用,但在设计理念、功能特色和适用场景上有明显区别。 让我详细对比一下这三个平台: 1. 平台定位对比 Dify 定位:全栈AI应用…

基站定位接口如何如何用PHP实现调用?

随着“新基建”战略的推进,我国移动通信基站数量快速增长。截至2024年底,全国基站总数已达1265万个,其中5G基站超425万个,构建起全球规模最大、技术领先的通信网络。 在这一基础上,基站查询API通过整合三大运营商数据…

Day 4:Shell流程控制——从“直线思维“到“智能决策“的进化

目录 一、if语句:你以为简单其实暗藏杀机1. 基础语法(看似简单却容易踩坑)2. 安全写法规范(企业级建议) 二、条件测试的六大门派1. 文件测试(运维最爱)2. 字符串比较(引号是灵魂&…

分布式训练中的随机种子策略:深入理解与实践指南

分布式训练中的随机种子策略:深入理解与实践指南 引言:一个容易被忽视的关键细节 在深度学习的分布式训练中,你是否见过这样的代码? torch.manual_seed(process_seed) # PyTorch操作 random.seed(process_seed) # Pyth…

金山办公发布WPS智慧教育平台,发力教育AI意义何在?

钛媒体消息,金山办公发布面向教育用户的 WPS 智慧教育平台,面对着金山办公的发力,我们该怎么分析呢? 首先,从市场拓展与用户需求响应角度看,金山办公此次推出WPS智慧教育平台,直接瞄准了教育领…

无人机航电系统之语音通信技术篇

无人机航电系统的语音通信技术是确保无人机与地面控制站、其他无人机或相关人员之间实现高效、稳定语音交互的关键技术,在军事侦察、应急救援、物流运输、航拍测绘等众多领域发挥着至关重要的作用。 一、技术原理 无人机航电系统的语音通信技术主要基于无线通信原理…

element plus 的树形控件,如何根据后台返回的节点key数组,获取节点key对应的node节点

在使用 Element Plus 的 el-tree 组件时,如果后端返回的节点 key 数组中包含了部分选中的父级节点的 key,可能会导致该父级节点下的所有子节点也被默认选中。这是因为 el-tree 的默认行为是:如果一个父节点被选中,那么其所有子节点…

什么是Sentinel

什么是 Sentinel? 在分布式系统中,服务间的依赖关系错综复杂。一个服务的故障,很可能像多米诺骨牌一样,迅速蔓延并导致整个系统崩溃,这就是我们常说的“雪崩效应”。为了避免这种灾难性后果,我们需要一种强大的机制来保护我们的系统,而 Sentinel 正是为此而生。 Senti…

AWS 使用图形化界面创建 EKS 集群(零基础教程)

无需命令行!通过 AWS 控制台图形化操作,轻松创建 Kubernetes 集群。 文章目录 文章简介 一、准备工作:登录 AWS 控制台 二、创建 EKS 集群(控制面) 1. 创建 EKS 集群 2. 设置集群基本信息 3. 配置网络设置 三、添加…

[C#] Winform - 进程间通信(SendMessage篇)

一、发送端 // 窗体:发送端 public partial class SendForm : Form {public SendForm(){InitializeComponent();}// 按钮:发送private void btnSend_Click(object sender, System.EventArgs e){IntPtr hwnd User32Helper.FindWindow(null, "接收端…

锂电池保护板测试仪:守护电池安全的幕后保障

在电动汽车、储能电站和便携式电子设备中,锂电池作为核心动力源,其能量密度与安全性始终是行业关注的焦点。锂电池在过充、过放、短路等异常情况下可能引发起火甚至爆炸,而锂电池保护板正是解决这一问题的关键组件。为确保保护板性能可靠&…

Qemu搭建RISC-V,运行opensbi+u-boot+img

✨1.先下载一个Ubuntu镜像 https://cdimage.ubuntu.com/releases/24.04/release/ 我这里下载的是这个RISC-V的 🌟1.2.解压镜像 xz -d ubuntu-24.04.2-preinstalled-server-riscv64.img.xz ✨2.准备RISC-V的QEMU 打开qemu官网https://www.qemu.org/&#xff0c…

【实战手册】银河麒麟服务器系统进入单用户模式修改密码(root)指南

目录 前言 一、银河麒麟单用户模式简介 二、进入单用户模式修改密码 三、登录验证新密码 结语 前言 在日常服务器运维工作中,忘记root密码是系统管理员偶尔会遇到的问题。作为国产操作系统的优秀代表,银河麒麟服务器系统提供了通过单用户模式重置r…