初识 Redis - 分布式,内存数据存储,缓存

2023-11-13

目录

1. 什么是 Redis

1.1 Redis 内存数据存储

1.2 Redis 用作数据库

1.3 Redis 用作缓存 (cache)

1.4 用作消息中间件


1. 什么是 Redis

The open source , in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.

开源的内存数据存储,被数百万开发人员用作数据库、缓存、流引擎和消息中间件

从官网得到这句话来看, Redis 它最核心的作用就是用来在内存中存储数据.

1.1 Redis 内存数据存储

【思考】这时候我们就会想, 定义变量不就是在内存中存储数据嘛, 为啥需要 redis 来存 ??

如果只是单机程序的话, 直接通过变量来存储数据的方式, 确实是更优的选择.  而 Redis 是在分布式系统中, 才能发挥出它的威力的. 而如果在分布式系统中使用变量在内存中存储数据, 那是玩不转的, 因为定义变量是在当前服务器进程的内部去存储的, 而进程之间有个东西叫 "隔离性", 也就是说进程 A 它没法直接读取进程 B 内存中的数据. 在这样的一个前提之下, 如果是一个分布式系统, 势必会涉及到多个进程, 甚至这多个进程是在不同的主机上, 那么此时, 你想直接访问其他进程内存里面的变量, 这件事情就变得困难起来了.

而 Redis 就是针对上述这样一个需求点做了一个封装, 既然我们没法直接突破进程之间进行访问, 那我们应该怎么办呢 ?

【进程间通信】

我们之前在学进程的时候, 进程里有个东西叫做进程间通信, 而进程间通信最主流的方法就是基于网络来实现, 它既可以让同一个主机之间的多个进程间通信, 它还可以跨主机, 跨不同的主机实现进程间通信.

Redis 就是基于网络, 把自己内存中的变量分享给别的进程, 甚至别的主机的进程来进行使用, 而这就是 Redis 最核心的部分.

1.2 Redis 用作数据库

谈到数据库, 我们就会自然而然的联想到 MySQL, MySQL 是目前主流的数据库之一, 它也可以在一个分布式系统中帮我们存储数据, 并且也能管理好数据; 但是MySQL它最大的问题在于, 访问速度 "比较慢"!!  有句话说的好 : "天下武功唯快不破", 尤其是现在很多互联网产品中, 对于性能要求是很高的. 

所以相比于 MySQL 来说, Redis 也可以作为数据库来使用, 它和 MySQL 相比, Redis的优点就是"快"!! 而且是快上万倍, MySQL 的数据是在硬盘中存储, 而 Redis 的数据是在内存中存储. (可以参照下表)

谷歌公司给出的各层级硬件执行速度 :

上表是从定性的角度可以知道 Redis 比 MySQL 快很多, 具体快多少, 是很难定量衡量的. 因为 MySQL 和 Redis 支持的功能上差异很大, 如果要定量衡量, 得在相同功能, 相同应用场景中, 进行控制变量法才可以衡量. 

那既然 Redis 那么快, 为啥还要使用 MySQL 呢 ??

Redis 和 MySQL 相比,, 最大的劣势就是 "小" !! 存储空间有限. 虽然有不少的互互联网产品对于性能的要求比较高, 但是大部分的互联网产品对于性能的要求还是没那么高的.

如果性能没那么高, 同时我们又希望存储更多的数据, 用更低的成本来存, 那么相较于 Redis,  MySQL 必然是首选, 而且 MySQL 相较于 Redis 提供了更多的功能, 提供了更加丰富的增删改查能力. 

所以在 "功能" 上和 "存储空间" 上来说, MySQL 还是更胜一筹的!!

1.3 Redis 用作缓存 (cache)

【思考】既然 MySQL 它大但是速度慢, Redis 小但速度快, 那有没有一种方式, 可以做到又大又快呢??

典型的方案就是把 Redis 和 MySQL 结合起来使用, 也就是把 Redis 作为 MySQL 的 cache, 让热点数据存储在 Redis 中, 让全量数据存储在 MySQL 中, 也就是我们平时所说的 "二八原则" : 20% 的热点数据能够满足 80% 的访问需求.

这样做确实可以实现, 但是有得必有失, 这样玩带来的代价就是 :

  • 系统的复杂程度大大提升了
  • 如果数据发生修改, 还涉及到 Redis 和 MySQL 之间的数据同步问题

1.4 用作消息中间件

Redis 的初心就是用来作为一个 "消息中间件(消息队列)", 主要是为了实现分布式系统下的生产者消费者模型.

虽然 Redis 最初是想用来作为消息中间件来使用, 但是呢, 它偏偏有心栽花花不放, 无心插柳柳成荫. 随着 Redis 的发展, 他们突然发现把这个 Redis 作为一个数据库, 或者作为一个缓存好像更香, 而拿 Redis 作为一个消息中间件这件事反而非常少, 而且业界又演化出了更多更专用的一些消息中间件, 所以 Redis 它很少会被作为一个消息中间件来使用.

【总结】

       对 Redis 有了简单的了解后, 谈到 Redis, 三句话离不开一个词 - "分布式", 如果抛开分布式式系统, 那么 Redis 是没有太大的优势的, 所以要想能够更好的理解 Redis, 就得去了解一下分布式系统了, 下一篇博客来简单聊聊分布式系统.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初识 Redis - 分布式,内存数据存储,缓存 的相关文章

  • 保护节点 Redis

    我正在尝试保护 Node Redis IPC 服务器以使用私钥 公钥 我已经关注了本教程 http bencane com 2014 02 18 sending redis traffic through an ssl tunnel wit
  • redis集群不断打印日志WSA_IO_PENDING

    当我启动redis集群的所有redis服务器时 所有这些服务器不断打印类似WSA IO PENDING clusterWriteDone的日志 9956 03 Feb 18 17 25 044 WSA IO PENDING writing
  • 为什么Redis中不建议使用KEYS?

    在Redis中 建议不要使用按键命令 https redis io commands KEYS 为什么会这样呢 是因为它的时间复杂度是 O N 吗 或者是别的什么原因 我做了下面的实验来证明KEYS命令有多么危险 当带有 KEYS 的一个命
  • 如何在节点redis客户端上设置读取超时?

    在 github 上我没有看到读取超时的选项 https github com NodeRedis node redis https github com NodeRedis node redis There s connect timeo
  • Redis 排序集和解决关系

    我正在使用 Redis 排序集来存储我正在处理的项目的排名 我们没有预料到 我们想要如何处理关系 Redis 按字典顺序对具有相同分数的条目进行排序 但我们想要做的是对具有相同分数的所有条目给予相同的排名 例如在以下情况 redis 127
  • 如何批量删除Redis中数十万个带有特殊字符的key

    我们有一个包含数十万个 Redis 键的列表 其中包含各种特殊字符 我们希望批量删除它们 对于这个问题上的类似问题 有一些很好的答案 如何使用 Redis 自动删除与模式匹配的键 https stackoverflow com questi
  • SignalR 无法连接到 SSL 上的 Azure Redis

    我目前在 Azure 上托管我的 redis 缓存服务器 并让 signalR 依赖它作为骨干 使用以下内容 GlobalHost DependencyResolver UseRedis 服务器 端口 密码 eventKey 这可以在端口
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • Redis Docker compose无法处理RDB格式版本10

    我无法在 docker compose 文件中启动 redis 容器 我知道docker compose文件没问题 因为我的同事可以成功启动项目 我读到有一个删除 dump rdb 文件的解决方案 但我找不到它 我使用Windows机器 任
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • Redis、会话过期和反向查找

    我目前正在构建一个网络应用程序 并想使用 Redis 来存储会话 登录时 会话会使用相应的用户 ID 插入到 Redis 中 并且过期时间设置为 15 分钟 我现在想实现会话的反向查找 获取具有特定用户 ID 的会话 这里的问题是 由于我无
  • Spring Data JPA Redis:无法编写基于自定义方法的查询

    我已经使用 Redis 配置了 Spring Data JPA 并使用RedisRepositorieswith 提供了类似的方法find findAll 所有这些方法似乎都工作得很好 但我无法编写我的自定义方法 RedisEntity f
  • Redis是如何实现高吞吐量和高性能的?

    我知道这是一个非常普遍的问题 但是 我想了解允许 Redis 或 MemCached Cassandra 等缓存 以惊人的性能极限工作的主要架构决策是什么 如何维持连接 连接是 TCP 还是 HTTP 我知道它完全是用C写的 内存是如何管理
  • 使用 Celery 通过 Gevent 进行实时、同步的外部 API 查询

    我正在开发一个 Web 应用程序 该应用程序将接收用户的请求 并且必须调用许多外部 API 来编写对该请求的答案 这可以直接从主 Web 线程使用 gevent 之类的东西来扇出请求来完成 或者 我在想 我可以将传入的请求放入队列中 并使用
  • 如何使redis中的“HSET”子键“过期”?

    我需要使 Redis 哈希中所有超过 1 个月的密钥过期 这不可能 https github com antirez redis issues 167 issuecomment 2559040 为了保持 Redis 简单 https git
  • 如何在Redis中只保存一个数据库?

    我是 Redis 新手 有一个与备份相关的问题 目前 我有一个实例在 Windows 服务器上运行 在这个实例中 我当前有一项 工作 将数据存储在一个数据库中 我不想备份这些数据 我必须创造一份新工作 我的第一个想法是将数据存储在另一个数据
  • Redis+Docker+Django - 错误 111 连接被拒绝

    我正在尝试使用 Redis 作为使用 Docker Compose 的 Django 项目的 Celery 代理 我无法弄清楚我到底做错了什么 但尽管控制台日志消息告诉我 Redis 正在运行并接受连接 事实上 当我这样做时 docker
  • Spring Redis删除不删除key

    我正在尝试删除一个 Redis 键 但由于某种原因它没有删除 但也没有抛出异常 这是我要删除的代码 import com example service CustomerService import com example model Cu
  • Redis 队列工作程序在 utcparse 中崩溃

    我正在尝试按照以下教程获得基本的 rq 工作 https blog miguelgrinberg com post the flask mega tutorial part xxii background jobs https blog m
  • 在 Spring 4 中干掉通用的 RedisTemplate

    我读到你可以拥有 Autowired从 Spring 4 开始泛型 这太棒了 我有一个摘要RedisService我想参加的课程 Autowired一个通用的 RestTemplate 如下所示 public abstract class

随机推荐

  • signature=b05c505286f606b32d69ab58ee3e7bf4,reduce-css-calc/yarn.lock at 0f6c532cf9dc52ac3cb23e143eaf...

    THIS IS AN AUTOGENERATED FILE DO NOT EDIT THIS FILE DIRECTLY yarn lockfile v1 ava babel preset stage 4 1 0 0 version 1 1
  • 云计算之你必须知道的几个会议和杂志

    云计算现在被大家炒的热火朝天 那么很多人也想更多了解云计算 那么我就给大家介绍几个杂志和网站 IEEE International Conference on Cloud Computing http www thecloudcomputi
  • vue中的promise对象,async和await学习记录

    promise有待学习 先记录一下最近再项目中学的关于async和await async await 其实就是用同步的写法去实现异步方法 async deleteproduct record const result await produ
  • npm 配置淘宝镜像

    首先解释一下 npm 为什么要配置淘宝镜像 原因 因为node js 默认使用的是国外的网站 国内访问有一个跨国内局域网的操作 所以就会有时候很慢 这就跟为什么网站的静态资源有些会使用CDN 加速一样的 淘宝镜像是什么 就是npm 很多的插
  • hive转义问题详解

    hive转义问题详解 引言 hive控制台执行 字符串不包含 字符串包含 hive e的方式嵌入到shell脚本执行 字符串不包含 字符串包含 总结 引言 hive转义问题想必进来的同学都遇到过 这里就直奔主题了 此类问题大致可以分为两种常
  • Linux上快速安装软RAID详细步骤

    常见问题服务平台 2018 11 17 物理环境 虚拟机CentOS6 4 配置 8G内存 2 2核cpu 3块虚拟硬盘 sda sdb sdc sdb和sdc是完全一样的 在实际生产环境中 系统硬盘与数据库和应用是分开的 这样有利于系统的
  • HDRP

    HDRP 的 10 版本支持 Unity 2020 LTS 及以上 新版的 HDRP 软件包将继续优化用户友好的界面 灵活的功能 管线的稳定性和总体性能 但如果想将 HDRP 设置到最佳状态 你必须要了解所有主要的管线设置 及其背后的原理和
  • Oracle报错:IO Error: The Network Adapter could not establish the connection

    Caused by oracle net ns NetException The Network Adapter could not establish the connection at oracle net nt ConnStrateg
  • 深度学习框架Pytorch快速开发与实践

    决定用两个星期读完这本书 并自己用Pytorch搭建一个模型 2019 8 5 第一章深度学习介绍 明确学习目标 深度学习难点不是深度学习本身 难的是你要吃透问题 如何用深度学习的逻辑去思考你自己的问题 有针对性地设计模型 难的是你有分析问
  • 机器学习系列(7)_机器学习路线图(附资料)

    作者 龙心尘 寒小阳 时间 2016年2月 出处 http blog csdn net longxinchen ml article details 50749614 http blog csdn net han xiaoyang arti
  • epoll高度封装reactor,几乎所有可见服务器的底层框架

    目录 前言 reactor是什么 如何理解 reactor所需组件流程分析 组件 流程 如何将epoll的IO驱动封装成reactor事件反应堆驱动 reactor分块分析实现 注册事件处理器部分流程 多路复用器监视多路IO事件 事件分发器
  • 【React学习】React更新渲染原理

    当我们调用 setState 之后发生了什么 react经历了怎样的过程将新的 state 渲染到页面上 一次react更新 核心就是对虚拟dom进行diff 找出最少的需要变化的dom节点 然后对其进行相应的dom操作 用户即可在页面上看
  • MySQL数据导入--load data

    起因 朋友的数据库 用的版本是5 5 19 服务端和客户端字符集都是utf8 因为某些原因 系统经过好多人的开发和处理 同一个表存在多种字符集写入 so乱码问题 时有发生 为了彻底解决这个问题 我这边的操作如下 1 核查工程中转码的地方 2
  • Python初学者的一个常见错误

    大家都知道 列表是可变数据类型 而可变数据类型的操作尤其需要我们细心 不然很容易出错 来看看这个例子 list1 1 2 3 4 5 list2 list1 3 print list2 list1 2 b list2 1 1 a print
  • [从零开始学DeepFaceLab-8]: 使用-命令行八大操作步骤-第5步:从源图片中提取所需图片

    目录 总体流程 步骤5 从源视频中提取图片 5 1 命令 5 data dst faceset extract manual fix bat 不推荐使用
  • vue回车事件

    一 需求 需求 登录页面在输入密码后 按回车键 Enter 触发登录 二 实现 部分代码 重点事件 keyup enter native 指的是回车监听事件 举例 keyup enter native submitForm ruleForm
  • 贪心算法——排队打水问题

    6 3 排队打水问题 有n个人排队到r个水龙头去打水 他们装满水桶的时间为t1 t2 tn为正整数且个不相等 应如何安排他们打水顺序才能使他们花费的时间最少 算法分析 时间总和 等待时间 装水时间 采用贪心思想 先sort 默认将装水时间从
  • LeetCode-2335. 装满杯子需要的最短总时长【贪心,数学】

    LeetCode 2335 装满杯子需要的最短总时长 贪心 数学 题目描述 解题思路一 其实像一道数学题目 假设三个杯子x lt y lt z先分两种情况 第一种 x y lt z 答案直接是最大的z 第二种 x y gt z 先将x与y互
  • .NET6之MiniAPI(四):配置

    配置文件 是一个每个应用服务程序常用的功能 从原来的终端应用时代 到现在的元宇宙时代 配置都是很悠然自得的存在 asp net core提供了强大的配置文件访问机制 不管是MVC API还是MiniAPI 使用方式都是相同的 框架默认的配置
  • 初识 Redis - 分布式,内存数据存储,缓存

    目录 1 什么是 Redis 1 1 Redis 内存数据存储 1 2 Redis 用作数据库 1 3 Redis 用作缓存 cache 1 4 用作消息中间件 1 什么是 Redis The open source in memory d