Redis(理论版)
Redis
1.Redis是什么
Redis其实就是一个数据库,它是一个文档型数据库(非关系型数据库),而mysql是一个关系型数据库。它是一个开源的、基于内存的高性能键值存储数据库,支持多种数据结构,广泛用于缓存、消息队列、应用数据存储等场景,以其快速的读写性能和灵活性而著称。Redis是一个快速的存储工具,可以记住各种信息,像网站的临时数据,让网站运行得更快,也可以帮助应用程序高效地交换消息或保存数据。它在内存中存储数据
2.Redis特性
1.基于内存的存储:Redis的数据存储在内存中,使得数据的读写速度非常快,适合高速缓存和实时应用场景。
2.支持多种数据结构:除了简单的键值对,Redis还支持列表(Lists)、集合(Sets)、有序集合(Sorted Sets)、哈希表(Hashes)、位图(Bitmaps)、超日志(HyperLogLogs)和地理空间(Geospatial)索引半径查询等数据结构。
3.持久化:尽管Redis是基于内存的,但它提供了RDB(快照)和AOF(追加文件)两种方式来持久化数据到磁盘,确保数据安全。
4.事务支持:Redis通过MULTI、EXEC、WATCH等命令支持事务,可以将多个命令作为一个原子操作执行。
5.高可用和分布式支持:通过Redis哨兵(Sentinel)和Redis集群(Cluster)机制,Redis支持高可用部署和数据分片,可以在多个节点间提供数据共享和故障转移。
6.发布/订阅(Pub/Sub):Redis实现了发布/订阅消息分发模型,支持消息的发布者和订阅者之间的消息通信。
7.Lua脚本支持:通过支持Lua脚本,Redis可以执行复杂的事务和数据处理操作,提高了数据操作的灵活性和效率。
8.简单易用:Redis有着简洁的设计和丰富的文档,易于安装和使用,同时社区支持力度大,有大量的客户端库支持不同的编程语言。
9.内存数据过期策略:Redis支持设置键的过期时间,这对于管理缓存数据非常有用,可以自动删除过期的数据项。
10.安全性:提供了访问控制和SSL加密等安全特性,可以保护数据不被未授权访问。
3.Redis为什么快
原因主要有以下几点:
1.纯内存操作:redis将所有数据存储在内存中,这意味着对数据的读写操作直接在内存中进行,而内存的访问速度远远高于磁盘。这种设计使得redis能够以接近硬件极限的速度处理数据读写。
2.单线程模型:redis使用单线程模型来处理客户端的请求。这可能听起来似乎效率不高,但是实际上,这种设计避免了多线程频繁切换和过度竞争所带来的性能开销,redis每个请求的执行时间都很短,因此在单线程下,也能够处理大量的并发请求。
3.I/O多路复用:redis使用了I/O多路复用的技术,可以在单个线程中同时监听多个客户端连接,只有当网络事件发生时候才会进行实际的I/O操作,这样有效地利用了cpu资源,减少了无谓的等待和上下文切换。
4.高效数据结构:redis提供了多种高效的数据结构,如哈希表,有序集合等。这些数据结构都经过了优化,使得redis在处理这些数据结构的操作时非常有效。
其中第三点 I/O多路复用你可能不太理解,让我来详细解释一下其中的一些名词
I/O多路复用技术
想象一下,有一个电话接线员(Redis服务器)需要同时监听多个电话(客户端连接)。不使用I/O多路复用的情况下,接线员需要一个接一个地检查每部电话是否有人打来,这样很低效,因为接线员大部分时间都在检查没有电话来的空闲电话上。
使用I/O多路复用技术后,接线员有了一个高级电话系统,这个系统可以同时监听所有电话,一旦有电话响起(网络事件发生),系统立刻通知接线员哪部电话需要回应。这样,接线员就不需要不断地检查每部电话,而是直接在需要时采取行动。
单线程模型
Redis 使用单线程模型处理命令,就像那位只有一个接线员,但由于I/O多路复用技术的帮助,这位接线员能够非常高效地处理多个电话。当没有电话需要接听(即没有网络I/O事件)时,接线员也不会白白浪费时间去检查每个电话,这大大提高了工作效率。
减少无谓的等待和上下文切换
在没有I/O多路复用技术的系统中,服务器需要不断地检查每个连接,看看有没有数据可以读取或发送,这种检查往往是无谓的,并且在多个任务(或线程)之间频繁切换会造成额外的CPU资源消耗(上下文切换)。
使用了I/O多路复用技术的Redis,只在有数据交互需要处理时才占用CPU去处理这些任务,有效减少了CPU资源的浪费,使得即使是单线程的Redis也能高效地处理大量客户端的请求。
总结,通过使用I/O多路复用技术,Redis能够在单线程中高效地管理多个客户端连接,仅在真正有数据需要处理时才进行操作,从而有效利用CPU资源,提高了性能。
上下文
在计算机科学中,“上下文切换”(Context Switch)是指CPU从执行一个任务(比如一个进程或线程)切换到执行另一个任务的过程。“上下文”(Context)是指某一时刻CPU寄存器和程序计数器的内容,以及任务相关的其他状态信息。这些信息对于CPU来说是执行任务所必需的,因为它们记录了任务执行到哪一点、变量的当前值等关键信息。
当操作系统决定从当前运行的任务切换到另一个任务时,它需要保存当前任务的上下文(即,把当前任务的状态信息保存起来),以便之后可以恢复这个任务,从它离开的地方继续执行。然后,操作系统加载新任务的上下文,CPU开始执行新任务。这个保存当前任务状态和加载新任务状态的过程就是上下文切换。
上下文切换是有成本的,包括:
时间成本:保存和加载上下文需要时间,这个时间内CPU不能执行其他的计算任务。
资源成本:上下文切换可能导致CPU缓存失效(因为不同任务可能使用不同的数据和代码),从而降低CPU缓存的效率。
因此,在多任务环境中,频繁的上下文切换会影响系统的整体性能。Redis使用I/O多路复用和单线程模型的方式,减少了上下文切换的需要,从而有效地利用CPU资源,提高了性能。
4.Redis用途
redis用途多种多样,其中最广泛的用途是如下几种:
- 用作数据存储
解释:Redis可以用作一个NoSQL数据库,存储应用的数据。虽然它是基于内存的,但提供持久化机制(如RDB和AOF),可以将内存数据保存到磁盘,实现数据的持久存储。
场景:适用于需要快速读写访问的场景,如用户配置信息、用户关系数据等。由于Redis支持丰富的数据结构,如字符串、列表、集合、哈希表等,因此非常灵活,能满足多种类型的数据存储需求。
优势:高性能读写、支持丰富的数据结构。 - 用作缓存存储
解释:Redis最常见的用途之一是作为缓存系统,存储临时数据,以减轻后端数据库的压力和提高应用的响应速度。
场景:适用于缓存网页、API响应结果、热点数据等。比如,电商网站中的商品详情页,可以将页面数据缓存到Redis中,用户每次访问时直接从缓存获取,减少数据库查询。
优势:极高的访问速度、支持数据过期策略,自动删除过期的缓存项。 - 用作Session存储
解释:在Web应用中,Redis可以用来存储用户会话(Session)信息,尤其是在分布式环境下,保持Session的一致性和可用性。
场景:适用于分布式Web应用,需要共享用户Session信息。由于Web应用可能部署在多个服务器上,使用Redis作为Session存储可以确保不同服务器上的应用能共享用户的登录状态和Session数据。
优势:快速访问、跨服务器Session共享、支持数据持久化和备份。 - 消息队列
解释:Redis的发布/订阅(Pub/Sub)模式和列表数据结构可以用来实现简单的消息队列功能,支持消息的生产和消费。
场景:适用于需要异步处理任务、解耦系统组件的场景。比如,一个电子邮件发送系统,用户操作触发邮件发送请求后,系统将请求消息发送到Redis队列,另一个负责发送邮件的后台服务从队列中取出并处理这些请求。
优势:实现应用组件间的异步通信、减少等待时间、提高系统响应速度和吞吐量。
5.Redis的限制
- 大容量数据存储
限制:Redis是基于内存的存储系统,虽然它提供了持久化选项,但如果你需要存储大量的数据(比如TB级别),Redis可能会变得成本高昂,因为内存的成本远高于硬盘。 - 复杂查询和分析
限制:Redis支持的查询相对简单,主要是基于键的访问。它不支持像SQL数据库那样的复杂查询、连接操作或数据分析功能。 - 事务处理
限制:虽然Redis支持基本的事务功能(通过MULTI/EXEC命令),但它的事务能力远不如关系数据库。Redis的事务没有回滚机制,一旦执行EXEC命令,就会尝试执行所有命令,即使某些命令失败了。 - 关系数据模型
限制:Redis是一个键值存储,它不是为存储和查询关系数据设计的。如果你的应用需要复杂的数据关系模型,传统的关系数据库可能是更好的选择。 - 完整的文本搜索
限制:虽然Redis可以用作存储文本数据,但它本身不提供全面的文本搜索功能,如全文检索、支持复杂查询的索引等。专门的搜索引擎(如Elasticsearch)在这方面功能更加强大。 - 数据安全和隐私
限制:Redis提供了基本的安全特性,如密码保护和SSL加密通信。然而,对于需要高级安全特性(如细粒度的访问控制、数据加密存储等)的场景,Redis可能需要与其他安全解决方案配合使用。 - 读写密集型应用
限制:虽然Redis在处理读操作时表现出色,但在写密集型应用场景中,持续的高写入负载可能会对性能产生影响,特别是当数据持久化和同步到磁盘时。
相关文章:
Redis(理论版)
Redis 1.Redis是什么 Redis其实就是一个数据库,它是一个文档型数据库(非关系型数据库),而mysql是一个关系型数据库。它是一个开源的、基于内存的高性能键值存储数据库,支持多种数据结构,广泛用于缓存、消息队列、应用…...
【NR 定位】3GPP NR Positioning 5G定位标准解读(四)
目录 前言 6 Signalling protocols and interfaces 6.1 支持定位操作的网络接口 6.1.1 通用LCS控制平面架构 6.1.2 NR-Uu接口 6.1.3 LTE-Uu接口 6.1.4 NG-C接口 6.1.5 NL1接口 6.1.6 F1接口 6.1.7 NR PC5接口 6.2 终端协议 6.2.1 LTE定位协议(LPP&#x…...
Docker容器化解决方案
什么是Docker? Docker是一个构建在LXC之上,基于进程容器的轻量级VM解决方案,实现了一种应用程序级别的资源隔离及配额。Docker起源于PaaS提供商dotCloud 基于go语言开发,遵从Apache2.0开源协议。 Docker 自开源后受到广泛的关注和…...
Docker安装+基础命令
一、检测、配置安装环境 (1)查看linux版本,是否符合>centos 7 (2)查看网络是否通畅 (3)安装gcc,gcc-c编译器 (4)安装device-mapper-persistent-data和lvm2…...
构建高性能Linux Virtual Server(LVS)集群
目录 引言 一、集群的基本理论 (一)什么是集群 (二)集群的分类 (三)LB Cluster 负载均衡集群 1.按实现方式划分 2.按协议层划分 (四)HA 高可用集群实现 二、LVS简介 &…...
Linux:线程的概念
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程的概念线程代码的简单示例 总结 前言 本文是对于线程概念的知识总结 一、线程的概念 在课本上,线程是比进程更轻量级的一种指向流 或 线程是在…...
如何在jupyter notebook 中下载第三方库
在anconda 中找到: Anaconda Prompt 进入页面后的样式: 在黑色框中输入: 下载第三方库的命令 第三方库: 三种输入方式 标准保证正确 pip instsall 包名 -i 镜像源地址 pip install pip 是 Python 包管理工具,…...
Linux下du命令和df命令的使用
du命令作用是估计文件系统的磁盘已使用量,常用于查看文件或目录所占磁盘容量。df命令是统计磁盘使用情况,可以用来查看磁盘已被使用多少空间和还剩余多少空间。du命令语法du [选项] [文件或目录名称]参数:-a:--all, 列…...
AIGC笔记--条件自回归Transformer的搭建
1--概述 1. 自回归 TransFormer 规定Token只能看到自身及前面的Token,因此需生成一个符合规定的Attention Mask;(代码提供了两种方式自回归Attention Mask的定义方式); 2. 使用Cross Attention实现条件模态和输入模态之…...
数据结构->链表分类与oj(题),带你提升代码好感
✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 1.🍎链表的分类 前面我们学过顺序表,顺序表问题: …...
unity-unity2d基础操作笔记(三)0.5.000
目标是:牢记以下137条操作,越级上升到中级阶段 unity-unity2d基础操作笔记(三) 一百零一、如何操作一个游戏物体由多个部分组成的动画一百零二、如何使用rigidbody 2d进行物体移动一百零三、获取游戏物体身上的组件方法一百零四、代码控制物体朝向一百零五、不使用插件,纯…...
【精华】AIGC启元2024
文章目录 AIGC 前沿(1) Gemini 1.5 Pro(2) Sora(3) EMO(4) Playground v2.5(5) VSP-LLM(6) Ideogram.ai(7) LTX studio AIGC 前沿 (1) Gemini 1.5 Pro 2024.02.16 谷歌新一代多模态大模型Gemini 1.5 Pro,在性能上超越OpenAI的GPT-4 Turbo,堪称业界最强…...
js对象解构语法
对象解构语法是一种 JavaScript 的语法特性,用于从对象中提取属性,并将这些属性值赋值给变量。 基本语法 const { property1, property2 } object;object 是要解构的对象。property1 和 property2 是对象中的属性名,用花括号 {} 包裹起来表…...
flowable使用taskService.addComment新增评论需要full_msg字段进行读取
背景 在构建创业项目JeecgFlow过程中,在调用taskService.addComment接口出现了异常。就是数据存储的Message信息出现了截取,也就是存储不完整。 效果如下. flowable版本6.7.2 问题排查 接口详解及问题代码 //新增评论的接口说明 Comment addComment(…...
java常用技术栈,java面试带答案
前言 我们从一个问题引入今天的主题。 在日常业务开发中,我们可能经常听到 DBA 对我们说“不要”(注意:不是禁止)使用 join,那么为什么 DBA 对 join 这么抵触呢?是 join 本身有问题,还是我们使…...
刷题第11天
代码随想录刷题第11天 | 二叉树前中后序遍历 前序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x…...
QML中动态增加表格数据
1.QML中的表格实现 import QtQuick 2.15 import QtQuick.Window 2.15import QtQuick.Controls 2.0 import Qt.labs.qmlmodels 1.0 import QtQuick.Layouts 1.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")TableModel{id:table_modelTabl…...
OBS插件开发(二)推流实时曲线
不发视频了,截个图算了,嫌麻烦 1,自定义QWidget图表绘制 ,动态更新 2,OBS直播帧率,码率监控 3,主要用于前端推流状况可视化,异常报警,及时性,无人值守直播...
Linux编程3.3 进程-进程的终止
1、正常终止 从main函数返回调用exit(标准C库函数)调用_exti或_Exit(系统调用)最后一个线程从其启动例程返回最后一个线程调用 pthread exit 2、异常终止 调用abort接受到一个信号并终止最后一个线程对取消请求做处理响应 3、进程返回 通常程序运行…...
排序(3)——直接选择排序
目录 直接选择排序 基本思想 整体思路(升序) 单趟 多趟 代码实现 特性总结 直接选择排序 基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...
Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...
2025.6.9总结(利与弊)
凡事都有两面性。在大厂上班也不例外。今天找开发定位问题,从一个接口人不断溯源到另一个 接口人。有时候,不知道是谁的责任填。将工作内容分的很细,每个人负责其中的一小块。我清楚的意识到,自己就是个可以随时替换的螺丝钉&…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
