当前位置: 首页 > article >正文

Redis背景介绍

在这里插入图片描述

⭐️前言⭐️
本文主要做Redis相关背景介绍,包括核心能力、重要特性和使用场景。

🍉欢迎点赞 👍 收藏留言评论

🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

🍉博客中涉及源码及博主日常练习代码均已上传GitHub


请添加图片描述

📍内容导读📍

  • 🍅背景介绍
    • 🍅1.核心能力
    • 🍅2.重要特性
    • 🍅3.使用场景

🍅背景介绍

Redis是一个在内存中存储数据的中间件,它在分布式系统中能够大展拳脚。

以下是Redis官网中对于Redis的介绍:

img

in-memory data store:

内存中存储数据;Redis就是基于网络,把自己内存中的变量给别的进程,甚至别的主机的进程进行使用。

cache:

缓存;20%的热点数据,能满足80%的访问需求;在业界中Redis经常作为缓存来使用。

database:

数据库;Redis也可以作为数据库来使用,而且速度相较于MySQL而言会快很多;但是和MySQL相比最大的劣势是存储空间是有限的

streaming engine/message broker:

流式引擎(消息队列);这个也是Redis的初心,最初就是用来作为一个“消息中间件”的(消息队列)

消息队列其实就是分布式系统下的生产者消费者模型,当前很少会直接使用Redis作为消息中间件,因为业界有更多更专业的消息中间件。

🍅1.核心能力

img

In-memory data structures——内存中的数据结构

MySQL是“关系型数据库”,主要是通过“表”的方式来存储组织数据的;

而Redis是“非关系型数据库”,主要是通过“键值对”的方式来存储组织数据的,key都是string,value则可以是一些数据结构。

Programmability——可编程性

针对Redis的操作,可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式,批量执行一些操作(可以带有一些逻辑)

Extensibility——扩展性

可以在Redis原有的功能基础上再进行扩展,Redis自身已经提供了很多的数据结构和命令,通过扩展,可以让Redis支持更多的数据结构,以及支持更多的命令(本质上就是一个动态链接库)

Persistence——持久化

Redis是把数据存储在内存上的,内存的数据是“易失”的,进程退出/系统重启都有可能导致数据丢失,为了解决这个问题,Redis会把数据存储在硬盘上,内存为主,硬盘为辅

硬盘相当于对内存的数据备份了一下,如果Redis重启了,就会在重启时加载硬盘中的备份数据,使Redis的内存恢复到重启前的状态

Clustering——集群

Redis作为一个分布式系统中的中间件,能够支持集群是很关键的;

支持水平扩展,类似于“分库分表”

一个Redis能存储的数据是有限的(内存空间有限),如果想存的更多,就需要引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分,构成一个集群。

High availability——高可用

高可用-》冗余/备份,Redis自身是支持“主从结构”的,从节点就相当于主节点的备份了,一个节点挂了,就由另一个节点顶上去,这样就实现了高可用

🍅2.重要特性

天下武功唯快不过,Redis最重要的特性是,为什么快呢,有以下几个原因:

1、Redis的数据存储在内存中,就比访问硬盘的数据库,要快很多

2、Redis的核心功能都是都是比较简单的逻辑,核心功能都是比较简单的操作内存的数据结构

3、从网络角度上,Redis使用了IO多路复用的方式(使用一个线程,管理很多个socket)

4、Redis使用的是单线程模型,减少了不必要的线程之间的竞争开销

多线程提高效率的前提是CPU密集型的任务,使用多个线程可以充分利用CPU多核资源,但是Redis的核心任务,主要就是操作内存的数据结构,用不到多核CPU,如果非要使用多线程,还会产生一些列不必要的锁开销。

5、Redis是使用C语言开发的

网上这么说,但是个人不认可,因为MySQL也是C语言开发的,还是前四个理由更具说服力


我们谈到的Redis的快,是相对于MySQL这样的关系型数据库而言的,但是如果是直接和内存中的操作变量相比,就没有优势了,甚至更慢了;

现在有这样一个场景,假设有一个单机系统(短视频系统),里面只有一个应用服务器,这个应用服务器里需要存储一些数据,比如存储一下视频的用户点赞数,就需要以视频ID:点赞个数这样的键值对格式来存储,那么使用一个Redis来存,还是直接在内存中存储呢?

如果使用HashMap是直接操作内存,但如果使用Redis是先通过网络,再操作内存的;

所以我们是否要使用Redis,要结合实际的需求来确定,如果引入Redis,因为网络通信的开销很大,所以会更慢,但是有了Redis之后,就可以把数据单独存储,后续应用服务器重启,不会影响到数据内容,而且如果未来要扩展成分布式系统,使用Redis是更佳的。

🍅3.使用场景

img

Real-time data store——实时存储数据

这里就是把Redis作为数据库来使用,以键值对的形式来存储数据;

大多数情况下,考虑到数据存储,优先考虑的是“大”,但是仍然有一些场景,考虑的是“快”,比如像搜索引擎这样的场景,对于性能的要求是非常高的,这时候就不能用MySQL这样的数据库了,而是需要使用类似于Redis这样的内存数据库来完成,把所有需要检索的数据都存储在内存中。

Caching&session storage——缓存和会话存储

Caching:业界经常将MySQL和Redis结合来使用,全量数据存储在MySQL中,根据二八原则把热点数据拎出来,存储在Redis中,哪怕Redis的数据没了,还可以从MySQL这边再加载回来

session storage:浏览器中的cookie实现用户身份信息的保存,需要session来配合,cookie只是在浏览器这边存储了一个用户的身份标识session ID,服务器这里才真正存储了用户数据,session是存储在应用服务器上的;

如果在分布式系统中通过负载均衡将请求打到服务器上,就有可能导致同一个用户的多次请求,打到了不同的服务器上,而出现需要重新登录多次的情况;

为了解决上述问题,有以下两种解决方法:

1、想办法让负载均衡器,把同一个用户的请求始终打在同一个机器上,不能再轮询了,而是要通过user ID取余计算之类的方式来分配机器

2、把会话数据单独拎出来,放到一组独立的机器上存储(Redis),这样即使应用程序重启了,会话也不会丢失【具体实现见下图】

img

Streaming&mesaging——消息队列

消息队列(服务器)就是网络版本的生产者消费者模型,它的优势有解耦合削峰填谷;

Redis的初心是作为消息队列的,但是真正用Redis作消息队列的并不多,业界也有很多知名的消息队列,比如RabbitMQ,Kafka,RocketMQ


⭐️最后的话⭐️
总结不易,希望uu们不要吝啬你们的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

请添加图片描述

相关文章:

Redis背景介绍

⭐️前言⭐️ 本文主要做Redis相关背景介绍,包括核心能力、重要特性和使用场景。 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉博客中涉及源码及博主…...

LabVIEW图像采集与应变场测量系统

开发了一种基于LabVIEW的图像采集与应变场测量系统,提供一种高精度、非接触式的测量技术,用于监测物体的全场位移和应变。系统整合了实时监控、数据记录和自动对焦等功能,适用于工程应用和科学研究。 项目背景 传统的位移和应变测量技术往往…...

html基本结构和常见元素

html5文档基本结构 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>文档标题</title> </head> <body>文档正文部分 </body> </html> html文档可分为文档头和文档体…...

upload labs靶场

upload labs靶场 注意:本人关卡后面似乎相比正常的关卡少了一关&#xff0c;所以每次关卡名字都是1才可以和正常关卡在同一关 一.个人信息 个人名称&#xff1a;张嘉玮 二.解题情况 三.解题过程 题目&#xff1a;up load labs靶场 pass 1前后端 思路及解题&#xff1a;…...

自定义多功能输入对话框:基于 Qt 打造灵活交互界面

一、引言 在使用 Qt 进行应用程序开发时&#xff0c;我们经常需要与用户进行交互&#xff0c;获取他们输入的各种信息。QInputDialog 是 Qt 提供的一个便捷工具&#xff0c;可用于简单的输入场景&#xff0c;但当需求变得复杂&#xff0c;需要支持更多类型的输入控件&#xff0…...

手写MVVM框架-环境搭建

项目使用 webpack 进行进行构建&#xff0c;初始化步骤如下: 1.创建npm项目执行npm init 一直下一步就行 2.安装webpack、webpack-cli、webpack-dev-server&#xff0c;html-webpack-plugin npm i -D webpack webpack-cli webpack-dev-server html-webpack-plugin 3.配置webpac…...

论文阅读:Realistic Noise Synthesis with Diffusion Models

这篇文章是 2025 AAAI 的一篇工作&#xff0c;主要介绍的是用扩散模型实现对真实噪声的仿真模拟 Abstract 深度去噪模型需要大量来自现实世界的训练数据&#xff0c;而获取这些数据颇具挑战性。当前的噪声合成技术难以准确模拟复杂的噪声分布。我们提出一种新颖的逼真噪声合成…...

JVM监控和管理工具

基础故障处理工具 jps jps(JVM Process Status Tool)&#xff1a;Java虚拟机进程状态工具 功能 1&#xff1a;列出正在运行的虚拟机进程 2&#xff1a;显示虚拟机执行主类(main()方法所在的类) 3&#xff1a;显示进程ID(PID&#xff0c;Process Identifier) 命令格式 jps […...

【TensorFlow】T1:实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 1、设置GPU import tensorflow as tf gpus tf.config.list_physical_devices("GPU")if gpus:gpu0 gpus[0]tf.config.experimental.set_memory_g…...

【ArcGIS_Python】使用arcpy脚本将shape数据转换为三维白膜数据

说明&#xff1a; 该专栏之前的文章中python脚本使用的是ArcMap10.6自带的arcpy&#xff08;好几年前的文章&#xff09;&#xff0c;从本篇开始使用的是ArcGIS Pro 3.3.2版本自带的arcpy&#xff0c;需要注意不同版本对应的arcpy函数是存在差异的 数据准备&#xff1a;准备一…...

动静态库的学习

动静态库中&#xff0c;不需要包含main函数 文件分为内存级(被打开的)文件和磁盘级文件 库 每个程序都要依赖很多基础的底层库&#xff0c;本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被载入内存执行 静态库 linux .a windows .lib 动态库 linux .…...

Rapidjson 实战

Rapidjson 是一款 C 的 json 库. 支持处理 json 格式的文档. 其设计风格是头文件库, 包含头文件即可使用, 小巧轻便并且性能强悍. 本文结合样例来介绍 Rapidjson 一些常见的用法. 环境要求 有如何的几种方法可以将 Rapidjson 集成到您的项目中. Vcpkg安装: 使用 vcpkg instal…...

DeepSeek的多模态AI模型-Janus-pro,可生图,可读图

简介 Janus-Pro 是由 DeepSeek 开发的一款多模态理解与生成模型&#xff0c;是 Janus 模型的升级版。它能够同时处理文本和图像&#xff0c;既能理解图像内容&#xff0c;又能根据文本描述生成高质量图像。Janus-Pro 的核心目标是通过解耦视觉编码路径&#xff0c;解决多模态理…...

Python爬虫实战:一键采集电商数据,掌握市场动态!

电商数据分析是个香饽饽&#xff0c;可市面上的数据采集工具要不贵得吓人&#xff0c;要不就是各种广告弹窗。干脆自己动手写个爬虫&#xff0c;想抓啥抓啥&#xff0c;还能学点技术。今天咱聊聊怎么用Python写个简单的电商数据爬虫。 打好基础&#xff1a;搞定请求头 别看爬虫…...

最短木板长度

最短木板长度 真题目录: 点击去查看 E 卷 100分题型 题目描述 小明有 n 块木板&#xff0c;第 i ( 1 ≤ i ≤ n ) 块木板长度为 ai。 小明买了一块长度为 m 的木料&#xff0c;这块木料可以切割成任意块&#xff0c;拼接到已有的木板上&#xff0c;用来加长木板。 小明想让最…...

【人工智能】掌握图像风格迁移:使用Python实现艺术风格的自动化迁移

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 图像风格迁移(Image Style Transfer)是一种基于深度学习的计算机视觉技术,通过将一张图像的内容与另一张图像的艺术风格结合,生成一幅具…...

git submodules

当代码仓库中包含 .gitmodules 文件时&#xff0c;这意味着该仓库使用了 Git 子模块&#xff08;Git Submodules&#xff09;。.gitmodules 文件记录了子模块的相关信息&#xff0c;如子模块的仓库地址、路径等。若要在下载代码时一并同步子模块&#xff0c;可以按照以下几种常…...

7 与mint库对象互转宏(macros.rs)

macros.rs代码定义了一个Rust宏mint_vec&#xff0c;它用于在启用mint特性时&#xff0c;为特定的向量类型实现与mint库中对应类型的相互转换。mint库是一个提供基本数学类型&#xff08;如点、向量、矩阵等&#xff09;的Rust库&#xff0c;旨在与多个图形和数学库兼容。这个宏…...

游戏引擎 Unity - Unity 下载与安装

Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...

[openwrt]openwrt slaac only模式下部分终端无法获取到IPv6 DNS

问题描述 OpenWrt 中,如果启用了 RA 单播(ra_unicast),但部分终端无法获取到 DNS 信息 问题分析 RA 单播的局限性 并非所有终端都完全支持通过单播接收 RA 消息。部分终端可能无法正确解析单播 RA 中的 RDNSS(Recursive DNS Server)选项,从而导致无法获取 DNS 信息。终…...

Java 面试真题

本题适合一到三年 Java 开发 &#xff0c;以下问题都是按照原面试官提问记录 文章目录 我要进大厂系列面试题二面 我要进大厂系列面试题 全部真题&#xff0c;欢迎投稿你的面试经验。 本篇涉及基础较多&#xff0c;但要耐性看完。 JVM内存模型垃圾回收器用的哪个gc各个算法…...

验证工具:GVIM和VIM

一、定义与关系 gVim&#xff1a;gVim是Vim的图形界面版本&#xff0c;提供了更多的图形化功能&#xff0c;如菜单栏、工具栏和鼠标支持。它使得Vim的使用更加直观和方便&#xff0c;尤其对于不习惯命令行界面的用户来说。Vim&#xff1a;Vim是一个在命令行界面下运行的文本编…...

理解 C 与 C++ 中的 const 常量与数组大小的关系

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;数组大小的常量要求&#x1f4af;C 语言中的数组大小要求&#x1f4af;C 中的数组大小要求&#x1f4af;为什么 C 中 const 变量可以作为数组大小&#x1f4af;进一步的…...

孟加拉国_行政边界省市边界arcgis数据shp格式wgs84坐标

这篇内容将深入探讨孟加拉国的行政边界省市边界数据&#xff0c;该数据是以arcgis的shp格式提供的&#xff0c;并采用WGS84坐标系统。ArcGIS是一款广泛应用于地理信息系统&#xff08;GIS&#xff09;的专业软件&#xff0c;它允许用户处理、分析和展示地理空间数据。在GIS领域…...

安心即美的生活方式

如果你的心是安定的&#xff0c;那么&#xff0c;外界也就安静了。就像陶渊明说的&#xff1a;心远地自偏。不是走到偏远无人的边荒才能得到片刻清净&#xff0c;不需要使用洪荒之力去挣脱生活的枷锁&#xff0c;这是陶渊明式的中国知识分子的雅量。如果你自己是好的男人或女人…...

APT (Advanced Package Tool) 安装与使用-linux014

APT (Advanced Package Tool) APT (Advanced Package Tool) 是一个用于管理 Debian 和 Ubuntu 系列 Linux 发行版上的软件包的工具。它简化了软件的安装、升级、配置和删除过程。APT 为用户提供了一个统一的命令行接口&#xff0c;使得管理和安装软件变得更加简单。 APT 主要…...

深度学习篇---深度学习中的超参数张量转换模型训练

文章目录 前言第一部分&#xff1a;深度学习中的超参数1. 学习率&#xff08;Learning Rate&#xff09;定义重要性常见设置 2. 批处理大小&#xff08;Batch Size&#xff09;定义重要性常见设置 3. 迭代次数&#xff08;Number of Epochs&#xff09;定义重要性常见设置 4. 优…...

Java设计模式:行为型模式→状态模式

Java 状态模式详解 1. 定义 状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象在内部状态改变时改变其行为。状态模式通过将状态需要的行为封装在不同的状态类中&#xff0c;实现对象行为的动态改变。该模式的核心思想是分离不同状态…...

快速幂,错位排序笔记

​ 记一下刚学明白的快速幂和错位排序的原理和代码 快速幂 原理&#xff1a; a^b (a^&#xff08;b/2&#xff09;) ^ 2&#xff08;b为偶数&#xff09; a^b a*&#xff08;a^&#xff08; (b-1)/2&#xff09;&#xff09;^2&#xff08;b为奇数&#xff09; 指数为偶数时…...

机器人基础深度学习基础

参考&#xff1a; &#xff08;1&#xff09;【具身抓取课程-1】机器人基础 &#xff08;2&#xff09;【具身抓取课程-2】深度学习基础 1 机器人基础 从平面二连杆理解机器人学 正运动学&#xff1a;从关节角度到末端执行器位置的一个映射 逆运动学&#xff1a;已知末端位置…...