【Redis】初识Redis

目录

Redis简介

Redis在内存中存储数据

Redis数据库中的应用

Redis缓存中的应用

Redis消息中间件

尾言


Redis简介

如下是Redis官网中,对Redis的一段描述

在这段描述中,我们提取如下关键要点:

  • Redis主要用于在内存中存储数据
  • Redis可以当成缓存使用
  • Redis可以当成数据库使用
  • Redis可以当成消息中间件使用

基于上述要点,我们接下来初步认识一下Redis


Redis在内存中存储数据

提起这个问题,可能会很奇怪,所谓的在内存中存储数据,难道不可以定义变量吗?定义变量不就是在内存中存储数据吗?

实际上,Redis在内存中存储数据主要应用于分布式系统中

若是单机情况下,我们在语言中通过定义变量的方式是一种更优的选择

回忆一下:我们说进程之间是具有隔离性的,即一个进程想直接访问另一个进程的内存和数据是不可能的,但分布式系统中就一定要求了一个进程能访问另一个进程的内存数据。

为了解决进程的隔离性带来的问题,我们引入了进程间通信的技术

而在当今互联网中,最常用于进程间通信的技术是网络

所以Redis的功能之一就是基于网络实现分布式系统下的进程间通信的技术


Redis数据库中的应用

Redis可以应用于数据库领域,我们应该知道,数据库如今最广泛使用的是MySQL,那么Redis与他相比有哪些优势,又有哪些劣势呢?


Redis vs MySQL : 优势

Redis与MySQL相比,最大的优势就是快!

我们都知道MySQL是把数据存储到硬盘上的,而Redis是把数据存储在内存中的,根据冯诺依曼体系结构我们知道,访问内存中的数据一定比访问外设上的数据要快的多!


Redis vs MySQL : 劣势

在当今的互联网公司中,虽然有很大一部分对于访问数据的效率要求比较高,但更大一部分的互联网公司对数据访问要求没那么高,Redis把数据存储到内存的方式,虽然提高了访问效率,但同时也带来了内存存储的另一个弊端:存储空间大小有限

对于同样多的一组数据,存储到内存上所需要的成本肯定是比存储到硬盘中要大的。这会导致成本的提高

总的来说若对于数据访问效率没有那么高,并且想控制成本,可以使用MySQL,但若对于数据访问效率有较高的要求,那么就要用到Redis了


Redis缓存中的应用

在上述Redis作为数据库中我们了解到,若需要访问效率较高, 使用Redis。但带来的是存储成本的增加。

有没有一种方案是既可以节省成本(内存空间),又可以提高访问效率的呢?

这就不得不提到计算机中的二八原则!

二八原则:在当今互联网中,百分之20的热点数据,已经可以满足用户百分之80的使用需求了

我们依据这个原则,可以把百分之20的热点数据存储到内存中,剩余的存量数据存储到硬盘中即可,需要的时候再拿

这样就会使得我们设计出来的系统即拥有较高的访问速度,需要的内存空间是较少的。

在这种方案中,Redis就是作为一个缓存的角色存在

但与此同时,这种设计方案也带来了如下问题:

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

Redis消息中间件

Redis作为消息中间件(消息队列)是Redis被制造出来的初心,但后来由于经过大量实践,发现Redis作为缓存/数据库的使用会比作为消息中间件更有用

消息中间件:分布式系统下的生产者消费者模型

一般我们不会使用Redis作为消息中间件,因为业界有着比Redis更优秀的消息中间件使用!


尾言

通过上述的介绍,我们初步了解了Redis与它的使用场景,可以发现,在上述介绍中充斥着大量的分布式系统概念,所以下一期我们一起来了解一下什么是分布式!

相关推荐
时间的拾荒人15 分钟前
Redis 主从复制详解:配置实操 + 原理机制
数据库·redis·面试
隔窗听雨眠1 小时前
MySQL三表JOIN执行内核与优化器决策机制
数据库·mysql·sql优化
威嵌神州1 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
Decay__2 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
笃行3503 小时前
【金仓数据库产品体验官】订单增量同步实战:MERGE、OUTPUT 与 IDENTITY 的兼容验证
数据库
星恒随风6 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
无奈笑天下7 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
小林ixn8 小时前
别再全量塞历史了:用 Redis 给 Agent 装上「短期记忆」
redis·agent
xiaoye-duck9 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
AllData公司负责人9 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析