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

news2024/11/13 23:14:07

目录

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, 就得去了解一下分布式系统了, 下一篇博客来简单聊聊分布式系统.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时间序列预测 | Matlab基于自回归移动平均模型(ARMA模型)时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基于自回归移动平均模型(ARMA模型)时间序列预测,单列数据输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量 w…

zookeper第二三课-Zookeeper经典应用场景实战

1. Zookeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户端API有: ZooKeeper官方的Java客户端API。第三方的Java客户端API,比如Curator。 ZooKeeper官方的客户端API提供了基本的操作。例…

MFS分布式文件系统

MFS分布式文件系统 应用背景 公司之前的图片服务器采用的是 NFS,随着业务量增加,多台服务器通过 NFS方式共享一个服务器的存储空间,使得 NFS 服务器不堪重负,经常出现超时问题。 而且NFS存在着单点故障问题,尽管可以…

C++STL:顺序容器之vector

文章目录 1. 概述2. 成员函数3. 创建 vector 容器的几种方式4. 迭代器vector容器迭代器的基本用法vector容器迭代器的独特之处 5. 访问元素5.1 访问vector容器中单个元素5.2 访问vector容器中多个元素 6. 添加元素6.1 push_back()6.2 emplace_back()6.3 emplace_back()和push_b…

[元带你学: eMMC协议 24] eMMC Packed Command CMD23读(Read) 写(write) 操作详解

依JEDEC eMMC及经验辛苦整理,原创保护,禁止转载。 专栏 《元带你学:eMMC协议》 内容摘要 全文 3200 字, 主要内容 目录 前言 1 Packed Commands 有什么用处? 2 Packed Commands 怎么实现? Packed Wri…

【爬虫】5.4 Selenium 实现用户登录

目录 任务目标 创建模拟网站 创建服务器程序 键盘输入动作 鼠标点击动作 编写爬虫程序 任务目标 Selenium 查找的 HTML 元素是一个 WebElemen t对象, 这个对象不但可以获取元素的属性值,而且还能执行一 些键盘输入send_keys()与鼠标点击click()的动…

leetcode 617. 合并二叉树

2023.7.9 这题要求合并两二叉树,若节点重叠则将节点值相加。 和之前不同的是需要同时对两棵树进行操作,我选用队列来做这题。 大致思路:通过遍历两棵树的对应节点,将节点值相加并合并到第一棵树上。如果某个节点为空,…

Squid 缓存服务器

Squid 缓存服务器 作为应用层的代理服务软件,Squid 主要提供缓存加速和应用层过滤控制的功能 ☆什么是缓存代理 当客户机通过代理来请求 Web 页面时 指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓…

Qt实现思维导图功能(五)

前文链接:Qt实现思维导图功能(四) 思维导图纵向分布模式:模式一 百度网盘体验地址: 链接:https://pan.baidu.com/s/1YNSBiFOUwnSSKvHsBvOT3g 提取码:ifyc动态演示效果 静态展示图片 前文BUG维…

Linux 网络IO管理(epoll实现)

文章目录 1、网络IO模型1.1、阻塞IO(blocking IO)1.2、非阻塞IO(non-blocking IO)1.3、多路复用 IO(IO multiplexing)1.4、异步 IO(Asynchronous I/O)1.5、信号驱动 IO(s…

可恶的剪绳子问题

1. 剑指 Offer 14- I. 剪绳子 题目描述:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最…

3.6.共享内存的学习

目录 前言1. 共享内存2. shared memory案例3. 补充知识总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习精简 CUDA 教程-共享…

基于Qt5 实现的简易慕课爬取程序

基于Qt5 实现的简易慕课爬取程序 一、项目概述二、源代码 一、项目概述 名称:MookScrapy 这个项目主要是使用了 Qt 里面的 QNetworkAccessManager 去下载慕课网站的数据 https://coding.imooc.com,也就是这个网站里面的卡片信息。然后做一定的分析和展示…

【架构设计】酒店预订应用的系统设计架构(如 Airbnb、OYO)

Airbnb、Booking.com 和 OYO 等酒店预订应用程序如何提供从酒店列表到预订再到付款的流畅流程?而且都没有一个小故障!在此博客中,您将获得对此的详细解释。由于它们非常庞大,以至于它们需要处理大量的用户流量。所以要管理这些&am…

计算机视觉:卷积核的参数可以通过反向传播学习到吗?

本文重点 在深度学习中,卷积神经网络(Convolutional Neural Networks, CNN)是一种常用的神经网络结构,其中卷积核是CNN的核心组件之一。卷积核是一个小矩阵,用于对输入数据进行卷积操作。卷积操作可以提取输入数据的特征,通过不同的卷积核可以提取不同的特征。 在前面课…

Wireshark TS | 二谈访问网页失败

前言 又一个访问网页失败的案例,该案例来自于 Wireshark sharkfest 2018 - Point And ShootPacket,其中的 Case 2 Cannot see homepage,描述的是来自 OSAKA 的用户抱怨访问一些网站页面不能显示,但是另外一些网站页面可以&#x…

软件测试岗位新标准:ISTQB认证与软件测试工程师职业发展

随着信息技术的飞速发展,软件测试行业也变得越来越重要。软件测试是保证软件质量的关键环节,因此,软件测试工程师的岗位也越来越受到重视。 ISTQB认证成为了衡量软件测试工程师职业能力的标准。 下面领测国际ISTQB考试认证中心就带您了解一下…

depot_tools问题记录 - 执行fetch/gclient命令无响应

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 在研究将Dart dill文件序列化为可读文本时遇到的问题。 开发环境 macOS: 13.4 问题描述 之前使用depot_tools中的fetch/gclient命令还是正常的,今天想实测--no-history参数时突然遇到命令无响应的情况…

Redis 删除 key用 del 和 unlink 有啥区别?

问题 del 和 unlink 有啥区别啊?为什么String类型删除不会做异步删除? 彬彬回答 DEL 和 UNLINK 都是同步的释放 key 对象,区别是怎么释放后面的 value 对象 DEL 每次都是同步释放 value 部分,如果 value 很大,例如一…

Openssh升级方法详解

项目组linux服务器被绿盟扫描出openssh 1.0.2版本有漏洞,需要升级到7.5版本,以下是升级过程: 第一步 安装Telnet服务 先下Openssh软件包 看你需要什么版本http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ 1.查看当前的ssh服务版本 …