【Redis】为什么要学 Redis
文章目录
- 前言
- 一、Redis 为什么快
- 二、Redis 的特性
- 2.1 将数据储存到内存中
- 2.2 可编程性
- 2.3 可扩展性
- 2.4 持久性
- 2.5 支持集群
- 2.6 高可用性
- 三、Redis 的应用场景
- 四、不能使用 Redis 的场景
前言
关于为什么要学 Redis 这个问题,一个字就可以回答,那就是:快!
Redis是一个将数据储存到内存中的非关系型数据库,它是以键值对的形式来组织数据的,一般可以用作内存数据库、缓存、消息队列等。
一、Redis 为什么快
使用 Redis 的主要原因就是因为它的快,但是它的快是相对于 MySQL 等这样的关系型数据库而言的。
-
首先,Redis 将数据储存到内存中,而像 MySQL 这样的关系型数据库则是将数据储存到磁盘上的,内存相较于磁盘而是,速度可以说快了几个数量级。因此 Redis 经常被用作应用程序的缓存层,可以将频繁访问的数据存储在 Redis 中,以减轻数据库负载。
-
Redis 所涉及到的业务功能都是 “短平快” 的,即都是对内存数据进行简单操作。
-
Redis 处理业务采取的是单线程模型,单线程就意味着可以充分利用 CPU 资源,减少了上下文的切换和锁竞争,从而提高了处理实际业务的性能。
-
Redis 支持了多种高效的数据结构,如哈希表、有序集合、位图等等,这些数据结构的设计和实现都经过了精心的优化,以提高查询和操作的速度。
-
Redis 提供了不同的持久化策略。如RDB快照和AOF日志,通过适当的持久化策略,可以在保障数据安全的同时减少对性能的影响。
-
Redis 支持并发访问,多个客户端可以同时进行读写操作,而不会导致锁竞争或性能下降。
二、Redis 的特性
关于 Redis 的特性可以简单的从 Redis 的官网中获取到答案:

2.1 将数据储存到内存中
Redis以内存为基础的数据存储方式意味着所有数据都存储在RAM中,而不是磁盘上。这使得Redis能够实现非常低延迟的读写操作,因为RAM的访问速度远高于磁盘。由于数据在内存中持续更新,Redis非常适合用作缓存,可以快速提供高频读取的数据,降低了对后端数据库的压力。
2.2 可编程性
Redis的可编程性允许开发者使用Lua脚本来执行自定义操作。这意味着您可以在Redis服务器上执行一系列命令,从而减少了往返通信的开销,提高了性能。通过使用Lua脚本,您可以实现复杂的业务逻辑,从而在单个原子性操作中执行多个命令。
2.3 可扩展性
Redis的可扩展性使其能够轻松应对不断增长的数据需求。您可以构建Redis集群,将数据分布在多个节点上,从而实现水平扩展。Redis集群支持数据分片和复制,可以动态添加或删除节点,以适应不同负载和容量要求。
2.4 持久性
Redis提供了多种持久化选项,以确保数据的持久性和可靠性:
- RDB快照: 定期将内存中的数据快照保存到磁盘上,以便在服务器重启时恢复数据。
- AOF日志: 将每个写操作追加到一个日志文件中,可以在服务器重启时重放这些操作以恢复数据。AOF日志可以更精确地恢复数据,但通常比RDB快照文件更大。
这些持久化选项可以根据应用程序的需求进行配置,以平衡性能和数据安全之间的权衡。
2.5 支持集群
Redis支持分布式架构,可以将多个Redis实例组成集群,以提高容量、可用性和容错能力。Redis集群自动分片数据并支持主从复制,这意味着数据可以在多个节点之间分布,同时保留数据的备份。这有助于确保即使在节点故障的情况下,系统也能保持可用。
2.6 高可用性
Redis 通过主从复制来实现高可用性。在主从复制中,一个 Redis 主节点负责写入操作,而一个或多个从节点复制主节点的数据。如果主节点出现故障,其中一个从节点可以自动晋升为新的主节点,确保系统的连续性。这种配置提供了故障恢复和容错能力,使得 Redis 成为可靠的数据存储解决方案。
总之,Redis 的这些特性使其成为一种功能强大、高性能且高可用性的数据存储和缓存解决方案。根据不同的应用需求,您可以选择配置和使用这些特性,以满足性能、可扩展性和数据保护方面的需求。
三、Redis 的应用场景
关于 Redis 的应用场景同样可以从官网中找到答案:

Redis 的三个主要使用场景可以总结如下:
-
实时数据存储: Redis作为一个实时数据存储系统,可以存储和检索实时产生的数据,适用于需要低延迟和高吞吐量的应用程序。它的多种内存数据结构支持复杂的数据操作,能够快速响应数据的读写需求,因此非常适合用于构建实时数据处理基础设施,如实时分析、监控和实时仪表板等应用场景。
-
缓存与会话存储: Redis由于其高速性能,非常适合用作缓存层和会话存储。它可以用于缓存数据库查询结果、复杂计算、API调用和会话状态。这降低了对后端数据库和服务器的负载,提高了应用程序的响应速度。同时,会话存储允许将用户会话数据存储在Redis中,以维护用户的登录状态和临时会话数据。
-
流式数据与消息传递: Redis的流数据类型使其成为高速数据摄入、消息传递、事件溯源和通知的理想选择。您可以使用Redis的流功能来处理高速数据流,从中提取有价值的信息,实现实时的消息传递系统,支持事件溯源,以及发送通知给订阅者。这对于构建实时应用程序和处理事件驱动的工作流程非常有用。
Redis 的多功能性和高性能使其成为多种实时应用程序的理想选择,包括缓存和会话存储、流式数据处理和实时数据存储等用途。根据应用程序的需求,可以在 Redis 中灵活应用这些使用场景,以满足不同的实时数据处理需求。
四、不能使用 Redis 的场景
尽管Redis是一种强大的数据存储和缓存解决方案,但它并不适用于所有场景。以下是一些不适合使用Redis的情况:
-
大规模长期存储: Redis的数据存储在内存中,因此受限于可用内存大小。如果需要长期存储大量数据,特别是超出可用内存容量的数据,Redis可能不是最佳选择。传统的数据库系统更适合这种需求,可以将数据持久化到磁盘上。
-
复杂的查询: Redis虽然支持多种数据结构,但它不支持复杂的查询操作,如SQL数据库那样。如果您需要进行复杂的联接、过滤和聚合操作,那么使用传统的关系型数据库可能更为合适。
-
事务的ACID支持: Redis虽然支持事务,但不提供与传统关系型数据库相同的ACID(原子性、一致性、隔离性和持久性)事务支持。如果您的应用程序要求严格的ACID事务支持,那么应该选择支持这种特性的数据库系统。
相关文章:
【Redis】为什么要学 Redis
文章目录 前言一、Redis 为什么快二、Redis 的特性2.1 将数据储存到内存中2.2 可编程性2.3 可扩展性2.4 持久性2.5 支持集群2.6 高可用性 三、Redis 的应用场景四、不能使用 Redis 的场景 前言 关于为什么要学 Redis 这个问题,一个字就可以回答,那就是&…...
动静态库生成使用
🔥🔥 欢迎来到小林的博客!! 🛰️博客主页:✈️林 子 🛰️博客专栏:✈️ Linux 🛰️社区 :✈️ 进步学堂 🛰…...
LLVM编译安装
LLVM编译安装 #全量下载 git clone https://github.com/llvm/llvm-project.git #只下载最新commit版本 git clone --depth 1 https://github.com/llvm/llvm-project.git#配置 #!/bin/bash set -ex cmake -S llvm -B build -DCMAKE_INSTALL_PREFIX/data0/huozai/software/insta…...
表的内连接和外连接
表的连接是SQL中的一种操作,用于将两个或多个表中的数据按照某个条件进行关联。 内连接 使用内连接将两个表(Table1 和 Table2)进行连接: select * from Table1 inner join Table2 on Table1.id Table2.id;举例: -- 用普通的写法 select…...
三、C#—变量,表达式,运算符(3)
🌻🌻 目录 一、变量1.1 变量1.2 使用变量的步骤1.3 变量的声明1.4 变量的命名规则1.5 变量的初始化1.6 变量初始化的三种方法1.7 变量的作用域1.8 变量使用实例1.9 变量常见错误 二、C#数据类型2.1 数据类型2.2 值类型2.2.1 值类型直接存储值2.2.2 简单类…...
纷享销客受邀出席CDIE2023数字化创新博览会 助力大中型企业增长
2023年,穿越周期,用数字化的力量重塑企业经营与增长的逻辑,再次成为企业数字化技术应用思考的主旋律,以数字经济为主线,数字技术融入产业发展与企业增长为依据,推动中国企业数字化升级。 9月5日,…...
linux下qt交叉编译 tslib 库
在 Linux 下进行 Qt 的交叉编译,并包含 tslib 库,可以按照以下步骤进行操作:1. 准备交叉编译工具链:首先,你需要准备适用于目标平台的交叉编译工具链。这个工具链包括交叉编译器、 2. 链接器和其他相关的工具ÿ…...
2.13 PE结构:实现PE代码段加密
代码加密功能的实现原理,首先通过创建一个新的.hack区段,并对该区段进行初始化,接着我们向此区段内写入一段具有动态解密功能的ShellCode汇编指令集,并将程序入口地址修正为ShellCode地址位置处,当解密功能被运行后则可…...
Rust更换Cargo国内源,镜像了寂寞
换皮不换身 换了国内源,构建时该卡还会卡。因为它所谓的换源,只是更换crates.io“索引”的源,而不是package“内容”的源。换了国内源后,在国内编译时访问 crates.io-index 自然会快很多,可是crates.io-index里面的信…...
【网络安全带你练爬虫-100练】第23练:文件内容的删除+写入
目录 0x00 前言: 0x02 解决: 0x00 前言: 本篇博文可能会有一点点的超级呆 0x02 解决: 你是不是也会想: 使用pyrhon将指定文件夹位置里面的1.txt中数据全部删除以后---->然后再将参数req_text的值写入到1.txt …...
ESP32蓝牙实例-BLE服务器与客户端通信
BLE服务器与客户端通信 文章目录 BLE服务器与客户端通信1、软件准备2、硬件准备3、代码实现3.1 BLE服务器实现3.2 Android手机测试BLE服务器3.3 ESP32 BLE客户端在本文中,我们将介绍如何使用低功耗蓝牙在两个 ESP32 开发板之间执行 BLE 服务器客户端通信。 换句话说,将介绍如…...
第11章_瑞萨MCU零基础入门系列教程之SysTick
本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...
【面试题精讲】如何使用Stream的聚合功能
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 求和(Sum): List<Integer> numbers Arrays.asList(1, 2, 3, 4, 5);int sum n…...
Linux 中的 chmod 命令及示例
在 Unix 操作系统中,chmod命令用于更改文件的访问模式。该名称是change mode的缩写。其中规定每个文件和目录都有一组权限来控制权限,例如谁可以读取、写入或执行该文件。其中权限分为三类:同时读、写和执行,用“r”、“w”和“x”表示。这些字母组合在一起形成一组用户的特…...
sannaing i14 pro max使用体验
体验了一把山寨机,不明真相的人会以为这是三星的英文标志,又是pro又是max的,价格600,进系统去看了配置,cpu写的是snapdragon 888,运存12g,内存500g。下了个安兔兔也是被忽悠了,它也以…...
Shazam音乐检索算法原理及实现
算法基本流程如下: 1. 采集音乐库 2. 音乐指纹采集 3. 采用局部最大值作为特征点 4. 将临近的特征点进行组合形成特征点对 5. 对每个特征点对进行hash编码 编码过程:将f1和f2进行10bit量化,其余bit用来存储时间偏移合集形成32bit的hash码 …...
vue递归组件
父组件: <template><div><treeVue :treeData"treeData"></treeVue></div> </template><script setup lang"ts"> import { reactive } from "vue"; import treeVue from "./tree.vue…...
软件测试/测试开发丨测试用例自动录入 学习笔记
点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27139 测试用例自动录入 测试用例自动录入的价值 省略人工同步的步骤,节省时间 兼容代码版本的自动化测试用例 用例的执行与调度统一化管理…...
来学Python啦,大话字符串
To be a happy man, reading, travel, hard work, care for the body and mind。做一个幸福的人,读书,旅行,努力工作,关心身体和心境。 前面我们讲解过关于用Python写温度转换器&…...
pyqt5设置背景图片
PyQt5设置背景图片 1、打开QTDesigner 创建一个UI,camera.ui。 2、创建一个pictures.qrc文件 在ui文件同级目录下先创建一个pictures.txt,填写内容: <RCC><qresource prefix"media"><file>1.jpg</file>…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
