redis 架构详解
Redis架构详解可以从以下几个方面进行阐述:
一、部署架构
Redis有多种部署架构,适用于不同的应用场景和需求,主要包括以下几种:
-
单机模式(Standalone Mode)
- 特点:部署简单,配置方便,性能较好,适合小规模应用。
- 优点:易于实现和维护。
- 缺点:存在单点故障问题,一旦Redis服务宕机,数据将不可访问;容量受限于单台机器的内存。
-
主从复制(Master-Slave Replication)
- 特点:主节点负责写入操作,从节点负责读取操作,数据从主节点自动同步到从节点。
- 优点:提升读性能,多个从节点分担读请求;数据冗余,提高数据安全性。
- 缺点:依然存在单点故障,主节点宕机后需要手动或自动进行主从切换;从节点的数据复制有延迟,可能会存在短时间内的数据不一致。
-
哨兵模式(Sentinel Mode)
- 特点:Redis Sentinel是一种高可用性架构,用于自动监控主从复制中的节点状态,发生故障时自动将从节点提升为主节点,保证服务的可用性。
- 优点:自动化的主从切换,提升高可用性;减少人工干预,自动监控和恢复。
- 缺点:哨兵本身可能成为单点故障,建议部署多个哨兵节点形成集群;哨兵模式主要保证高可用性,但不能提升写入性能。
-
集群模式(Cluster Mode)
- 特点:Redis Cluster是Redis的分布式部署方案,适用于大规模数据存储和高并发访问。它将数据分片存储在不同的节点上,并支持无中心的节点拓扑结构。
- 优点:具有水平扩展能力,支持大规模数据和高并发;提供高可用性和故障恢复机制;读写分离,性能更高。
- 缺点:集群部署相对复杂,节点之间的网络通信较为频繁。
二、高性能架构设计
Redis之所以具有高性能,主要得益于其独特的架构设计,包括以下几个方面:
-
内存存储
- Redis将数据存储在内存中,而不是在磁盘上。内存的读写带宽远高于磁盘,支持更高的并发读写操作,从而提高了Redis的响应速度。
-
高效的数据结构和操作
- Redis使用简单的键值对存储模型,并提供了多种高效的数据结构,如字符串、列表、哈希表、集合和有序集合等。这些数据结构在内存中进行优化,能够快速进行数据操作,减少了数据处理的复杂性和计算开销。
-
IO多路复用技术
- Redis使用了非阻塞I/O和事件驱动模型,充分利用了操作系统的I/O多路复用机制(如epoll)。这种机制使单个线程可以监视多个文件描述符(如网络套接字),避免了为每个连接创建一个线程或进程的开销,从而提升了性能。
-
异步操作
- Redis支持异步操作,可以在后台执行一些耗时的操作,如持久化到磁盘或复制数据到其他节点。通过异步操作,Redis可以更快地响应客户端请求,而不必等待这些操作的完成。
-
优化的网络通信协议
- Redis使用自己优化的RESP(REdis Serialization Protocol)网络通信协议。该协议简单且高效,能够减少网络通信的开销,提升数据传输效率。
三、Redis 基本架构组件
-
Redis Server(服务器)
- 这是 Redis 的核心部分,负责接收客户端的请求、处理数据操作并返回结果。它包含多个重要的模块。例如,在内存存储方面,它有一个高效的数据结构存储系统,用于存储键值对。这些数据结构包括字符串(String)、列表(List)、哈希(Hash)、集合(Set)和有序集合(Sorted Set)等。以字符串为例,它可以存储简单的文本信息,如用户的登录令牌;列表可用于实现消息队列,像记录用户操作日志的顺序队列;哈希适合存储对象相关的数据,如用户信息对象,其中用户名、年龄等可以作为哈希的字段存储在一个键对应的哈希结构中。
- 服务器还包含网络通信模块,用于处理与客户端的连接。它通过 TCP 协议监听指定端口(默认是 6379),接收来自客户端的请求,如 SET、GET 等操作命令,并将处理后的结果返回给客户端。
-
Redis Client(客户端)
-
客户端是用于与 Redis 服务器进行交互的工具。有多种类型的客户端,包括官方提供的 Redis - CLI(命令行客户端),它是一个简单的命令行工具,用户可以通过输入 Redis 命令来直接操作服务器。例如,在命令行中输入
SET key value就可以在服务器中存储一个键值对,GET key则可以获取对应键的值。 -
除了命令行客户端,还有各种编程语言对应的客户端库,如 Python 的
redis - py、Java 的
Jedis等。这些客户端库使得在不同的编程语言环境中能够方便地与 Redis 服务器进行通信。以
redis - py为例,在 Python 应用程序中,可以通过以下方式使用:
import redisr = redis.Redis(host='localhost', port=6379)r.set('key', 'value')print(r.get('key'))
-
-
数据持久化模块
- RDB(Redis Database)持久化:RDB 是一种快照式的持久化方式。Redis 会在满足一定条件时(如经过指定的时间间隔或者达到一定的写操作次数),将内存中的数据以二进制格式保存到磁盘上的一个文件(RDB 文件)中。例如,在备份场景下,RDB 文件可以方便地用于数据恢复。当 Redis 服务器重新启动时,它可以通过加载这个 RDB 文件快速地恢复数据状态。这种方式的优点是数据恢复速度快,文件体积相对较小,适合用于大规模数据的备份;缺点是可能会丢失两次快照之间的数据。
- AOF(Append Only File)持久化:AOF 持久化方式是通过记录服务器执行的写命令来实现持久化的。所有的写命令(如 SET、LPUSH 等)会以追加的方式写入一个 AOF 文件。在服务器重启时,Redis 会重新执行 AOF 文件中的命令来恢复数据。AOF 的优点是数据丢失风险较低,能够更好地保证数据的完整性;缺点是文件体积可能会因为不断追加命令而变得很大,并且数据恢复速度相对较慢,因为需要重新执行大量的命令。
相关文章:
redis 架构详解
Redis架构详解可以从以下几个方面进行阐述: 一、部署架构 Redis有多种部署架构,适用于不同的应用场景和需求,主要包括以下几种: 单机模式(Standalone Mode) 特点:部署简单,配置方便…...
多分类交叉熵与稀疏分类交叉熵
总结: 标签为 One-hot 编码的多分类问题,用分类交叉熵对于标签为整数的多分类问题,用稀疏分类交叉熵稀疏分类交叉熵内部会将整数标签转换为 One-hot 编码,而如果标签已经是 One-hot 编码的形式,再使用稀疏分类交叉熵就会多此一举。 算例 假设我们有三个类别:A、B 和 C。…...
PHP 8新特性深度解析与实战应用
引言 PHP作为一种广泛使用的开源脚本语言,以其在Web开发领域的卓越性能而闻名。随着PHP 8的发布,这门语言再次迎来了许多令人兴奋的新特性和改进。本文将深入探讨PHP 8的新特性,并提供实战应用示例,帮助开发者更好地理解和使用PH…...
【C语言】UDP通信
udp使用的是数据报传输。可以一对一,一对多进行传输,用于快速,实时性高的场景 服务器端: 使用步骤: 1.创建socket 2.bind绑定可接收的客户端 3.while{ recv接收数据 send发送数据 } #include <stdio.h> #inclu…...
用Keytool和OpenSSL生成和签发数字证书
一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书 J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密钥、证书和证书链。Keytool工具的命令在JavaSE6中已经改变,不过以前的命令仍然支持。Keytool也可以用来管理对称加密算法中…...
算法-动态数组-62.不同路径
一、题目 二、思路解析 1.思路: 对于找到目的地它的来源主要来源于目的地的上一格和目的地的左一格 2.常用方法: 无 3.核心逻辑: 1.处理边界: a.只向右移动,至始至终只有一条路径 for(int i0;i<m;i){dp[i][0]1; } …...
Y3编辑器教程5:触发器进阶使用(镜头、UI、表格、函数库、排行榜、游戏不同步)
文章目录 一、游戏声音设计二、 游戏镜头设计2.1 镜头的基本参数2.2 镜头时间轴动画 三、界面编辑3.1 界面编辑器设置3.2 添加按钮事件3.3 触发编写 四、 表格编辑器(实现对话UI)4.1 一维表和多维表4.2 数据验证、搜索、保存与撤销4.3 Excel导入导出4.4 …...
基于小程序实现地图定位、轨迹绘制、地图标点、快捷导航、唤醒导航APP、开箱即用
目录 前言研究背景与意义研究目标与内容研究方法与技术路线小程序地图组件介绍定位技术与原理轨迹绘制技术地图标注与标记功能地图定位与轨迹绘制功能实现定位功能设计与实现获取用户当前位置总结说明代码块前言 研究背景与意义 地图定位和轨迹追踪作为智能手机中常见的功能之…...
JAVA后端实现全国区县下拉选择--树形结构
设计图如图: 直接上代码 数据库中的格式: JAVA实体类: Data public class SysAreaZoningDO {private Long districtId;private Long parentId;private String districtName;private List<SysAreaZoningDO> children; } MapperSQL语句…...
数据结构速成
1. 数据结构与算法 2. 顺序表 3. 链表 4. 栈与队列 5. 串 6. 树与二叉树(1) 7. 树与二叉树(2) 8. 图 9. 图的应用 10. 查找 11. 排序(1) 12. 排序(2)...
Electron-Vite 项目搭建(Vue)
前提条件 Node.js: 确保已安装 Node.js 版本 18 或更高版本 (推荐使用最新稳定版)。Vite: 确保 Vite 版本为 4.0 或以上。包管理工具: 推荐使用 pnpm,但也可以使用 npm 或 yarn。 安装 Electron-Vite 首先,在项目中安装 electron-vite 作为开发依赖&a…...
如何寻找和改进开源项目来作为个人简历项目
寻找开源项目: 使用开源代码平台(如GitHub)来搜索优质的开源项目。例如,可以通过搜索关键词如“spring boot”, in name spring boot或者使用更具体的条件,如“star大于1000”来筛选热门项目。 star:>…...
STEM真题 第五题 比 n 小的最大数
题目描述 给定一个正整数 n,请将 n 中的每位数字重新排列并组成一个新数,要求新数的值要小于 n,请找出所有 符合要求的新数中最大的那个正整数,如果不存在这样的正整数,则输出 -1。例 1:n 312࿰…...
HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face 论文解读
1. 引言 近年来,大型语言模型(LLMs)如ChatGPT在自然语言处理领域取得了惊人的进展,展现出强大的语言理解、生成和推理能力。然而,当前的LLMs仍然存在一些局限性,例如无法处理复杂信息(如视觉和…...
深入了解HTTPDNS-使用Python实现一个HTTPDNS服务
深入了解HTTPDNS-使用Python实现一个HTTPDNS服务 HTTPDNS的起源 传统的DNS(Domain Name System)是互联网的核心协议之一,负责将人类可读的域名解析为机器可理解的IP地址。经典的DNS查询基于UDP协议,在特定网络环境下可能存在如下…...
IDEA 可视化使用 git rebase 合并分支步骤 使git分支树保持整洁
模拟环境 dev 分支开发完一个功能,需要合并到 master 分支,如果现在直接 merge 合并的话 git分支树会出现杂乱分叉,先把 master 分支 rebase 到 dev git分支树就会是整洁的一条直线 git rebase介绍 rebase:翻译成中文是重新设定,…...
网络安全教学博客(二):常见网络安全威胁剖析
在上一篇博客中,我们了解了网络安全的基础概念和重要性。今天,让我们深入探讨一下常见的网络安全威胁,以便我们能够更好地识别和防范它们。 恶意软件(Malware) 病毒(Virus):病毒是一…...
区块链技术及应用(期末考试版)
简述区块链中的默克尔树结构及其作用。 默克尔树(Merkle Tree)是一种二叉树数据结构,其叶节点是数据块的哈希值,而每个非叶节点是其子节点哈希值的哈希。它的主要作用是高效且安全地验证大规模数据结构中的数据内容。 解释为什么…...
Ubuntu22.04 docker如何发布镜像(和用git差不多)
在dockerhub上创建远程仓库:https://hub.docker.com/ 将本地镜像打tag,并修改成可以上传到 dockerhub 的形式 # 查看本地镜像# 修改镜像 ## docker tag 镜像名称:标签 新的镜像名称(要和远程仓库dockerhub上的一致):新的标签pus…...
基于python绘制数据表(上)
利用python绘制各种数据图表 绘制柱形图-源码 from openpyxl import Workbook from openpyxl.chart import BarChart, Reference# 创建工作薄 wb Workbook(write_onlyTrue) # 创建工作表 ws wb.create_sheet(月收入)# 准备数据 rows [(月份, 销售额),(1, 23),(2, 43),(3, …...
实战指南:Autofac 依赖注入在微服务架构中的高效应用
1. Autofac在微服务架构中的核心价值 微服务架构最大的挑战之一就是如何优雅地管理数百个服务的依赖关系。我经历过一个电商系统重构项目,当单体应用拆分成30多个微服务后,手工管理服务依赖就像在玩多米诺骨牌——改一个服务参数可能引发连锁反应。这时候…...
深入Linuxptp:ptp4l与E2E模式下的状态机与报文处理流程剖析
1. Linuxptp与ptp4l基础认知 第一次接触PTP协议时,我被那些专业术语搞得晕头转向。直到在实验室里用示波器抓到实际报文,才真正理解这个时间同步协议的精妙之处。Linuxptp作为开源实现,其中的ptp4l守护进程就像个尽职的交通警察,协…...
PX4飞控Telem2接口详解:除了连树莓派,还能怎么玩?(附QGC参数配置清单)
PX4飞控Telem2接口的进阶玩法:解锁隐藏功能的6种实战方案 在无人机开发领域,Pixhawk飞控的Telem2接口常被简单当作连接树莓派或Jetson的通信通道。但当我第一次测量到这个接口的VCC引脚居然能稳定输出5V/500mA时,一个大胆的想法浮现ÿ…...
快速验证c盘清理方案,用快马平台十分钟搭建原型工具
最近电脑C盘总是爆满,系统频繁弹窗提示空间不足,严重影响工作效率。作为一个非专业开发者,我尝试用InsCode(快马)平台快速搭建了一个C盘清理工具原型,整个过程比想象中简单许多。这里分享我的实现思路和具体操作步骤,或…...
高效Windows注册表分析工具实战指南:如何用RegRipper3.0突破注册表数据提取瓶颈?
高效Windows注册表分析工具实战指南:如何用RegRipper3.0突破注册表数据提取瓶颈? 【免费下载链接】RegRipper3.0 RegRipper3.0 项目地址: https://gitcode.com/gh_mirrors/re/RegRipper3.0 ▶ 核心价值:为什么RegRipper3.0是注册表分析…...
以采购管理系统为例,构建多角色AI智能体协作系统
成果演示(基于 Trae Solo) 1.构建智能体Trae Solo 支持智能生成智能体,输入角色及职能描述,即可得到角色智能体。在此构建需求分析智能体、架构设计智能体、前端智能体、后端智能体进行演示。2.创建任务 本文依照需求分析、架构设…...
实战指南:基于快马AI生成贴合业务场景的问卷系统,超越通用opencode
在开发一个在线问卷调查系统时,很多开发者会直接使用现成的opencode或开源组件。但实际业务中,通用方案往往难以完全匹配特定需求。最近我在InsCode(快马)平台上尝试了一个实战项目,通过AI生成高度定制化的问卷系统后台API,效果远…...
别再乱点默认应用了!麒麟Kylin Desktop V10 SP1默认程序设置,一篇讲清逻辑与重置
麒麟Kylin桌面系统V10 SP1:默认应用管理的深度解析与实战指南 你是否曾在安装WPS或浏览器时,面对系统弹出的默认应用选择窗口随手一点,结果发现.docx文件全被浏览器打开?这种"手滑"操作在麒麟Kylin Desktop V10 SP1系统…...
别再手动翻译Excel了!用Python+腾讯翻译API,5分钟搞定整张表格
别再手动翻译Excel了!用Python腾讯翻译API,5分钟搞定整张表格 当产品经理收到海外用户反馈的CSV文件时,第一反应往往是打开翻译网站逐行复制粘贴。我曾见过同事花三小时处理200条英文评论,而同样的工作用Python脚本只需喝杯咖啡的…...
万象视界灵坛部署教程:阿里云ECS+Docker一键部署开源多模态感知平台
万象视界灵坛部署教程:阿里云ECSDocker一键部署开源多模态感知平台 1. 项目概述 万象视界灵坛(Omni-Vision Sanctuary)是一款基于OpenAI CLIP技术的高级多模态智能感知平台。它将复杂的语义对齐技术转化为直观的像素风格交互体验࿰…...
