Redis_2_特性介绍+应用场景

通过上文的学习,我们已经知道了Redis是一个内存中存储数据的中间件。用于作为数据库,用于作为数据缓存,主要在分布式系统中大展拳脚。

下面我们来介绍Redis的一些特性(优点)。

特性介绍

1、在内存中存储数据

MySQL主要是通过"表"的方式来存储数据的"关系型数据库",Redis则主要是通过"键值对"的方式来组织数据的"非关系型数据库"。key都是String的,value则可以是文档下面浅体字提到的数据结构~

2、可编程性的

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

ps:上面提到的Lua也是一个编程语言。读作:"撸啊"(官方给出的标准发音)

3、可扩展的

程序员可以在Redis原有的功能基础上再进行扩展,Redis提供了一组API。Redis是通过C,C++和Rust语言编写的,本质上是一个动态链接库。

下面是GPT对动态链接库的解释:

总而言之,通过这三种语言的编写使得我们能够自己去扩展Redis的功能。比如,Redis自身已经提供了很多的数据结构和命令。通过扩展,让Redis支持更多的数据结构以及支持更多的命令~~

4、支持持久化存储

之前我们提到Redis把数据存储在内存上的。而内存的数据是"易失"的,进程退出/系统重启都会导致内存数据的丢失。Redis会把数据存储在硬盘上,内存为主,硬盘为辅。硬盘相当于对内存中的数据备份了一下,如果Redis重启了,就会在重启时加载硬盘中的备份数据,使得Redis的内存恢复到重启前的状态。

5、支持集群

Redis作为一个分布式系统中的中间件,能够支持集群是很关键的。它是支持进行水平扩展的,这个水平扩展,类似于"分库分表"。

一个Redis能存储的数据是有限的(内存空间有限),这时候我们就可以引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分。

6、高可用的

Redis的高可用主要是因为它的冗余和备份。Redis自身也是支持"主从"结构的,从节点就相当于主节点的备份了。

7、快!!!

说到Redis,我们都知道它的访问的速度比MySQL更快,那么为啥Redis快呢?

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

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

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

IO多路复用解释:

4、Redis使用的是单线程模型(虽然更高版本的Redis引入了多线程),这样单线程模型,减少了不必要线程之间的竞争开销。

这时候,就会有疑问了?当时讲多线程时,不是说多线程下的效率比单线程更高吗?现在怎么反过来了?

多线程提高效率的前提时,当前要完成的任务是CPU密集型任务,使用多个线程可以充分地利用CPU多核资源。而Redis的核心任务,主要就是操作内存的数据结构~~不会吃很多的CPU,使用多线程反而可能涉及到线程安全问题,需要加锁,使得访问速度下降。

5、Redis是使用C语言开发的,所以快!!

这个观点我个人并不认可,因为MySQL也是C语言开发的。

应用场景

1、作为数据库使用

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

当然,使用这样的内存数据库,存储大量的数据,需要不少的硬件资源,这时就需要充钱了。并且由于这里Redis存储的是全量数据,这里的数据是不能随便丢的~~

2、用作缓存&存储session

我们知道MySQL存储的数据比较慢,此时我们就可以把热点数据放到Redis中进行存储,与上面的第一点不同,这里的Redis存储的是部分数据,全量数据都是以MySQL为主的。哪怕Redis的数据没了,还可以从MySQL这边加载回来。

存储session

在之前的HTTP的讲解中我们都知道了服务器是通过cookie-session的方式来识别用户的登录信息的。cookie是在浏览器这边存储的一个用户的身份标识,通过携带sessionId来让服务器识别用户的身份信息,但是这种方式只能应用在单应用服务器的情况下。

如何解决上述问题呢?

1、想办法让负载均衡器,把同一个用户的请求始终打到同一个机器上(此时就不能通过轮询的方式来进行分配了,而是要通过userId之类的方式来分配机器)。

2、把会话单独拎出来,放到一组独立的机器上存储(Redis),此时就算应用程序重启了也能保证会话不丢失。

3、用作消息队列

此处的消息队列和我们在多线程那里讲的消息队列是一样的,基于消息队列能够实现一个网络版本的生产者消费者模型~~

对于分布式系统来说,服务器和服务器之间,使用生产者消费者模型是非常香的,生产者消费者模型的优势在于:1、解耦合 2、削峰填谷,业界也有很多知名的消息队列,RabbitMQ、Kafaka、RocketMQ......Redis也是提供了消息队列功能的,如果当前场景中,对于消息队列的功能依赖不是很多,并且又不想引入额外的依赖了,Redis可以作为一个选择。

相关推荐
爬山算法7 小时前
Redis(93)Redis的数据加密机制是什么?
数据库·redis·bootstrap
Andy8 小时前
Mysql基础3
数据库·mysql
Andy8 小时前
Mysql基础1
数据库·mysql·adb
pythonpioneer8 小时前
【2025】Solid Edge下载安装教程(附安装包)保姆级安装步骤
前端·数据库·其他·edge
蓝色 - Lanse9 小时前
模型推理如何利用非前缀缓存
人工智能·缓存
问道飞鱼9 小时前
【数据库知识】PGSQL常见命令行与函数
数据库·oracle·pgsql
CoookeCola9 小时前
MovieNet (paper) :推动电影理解研究的综合数据集与基准
数据库·论文阅读·人工智能·计算机视觉·视觉检测·database
酷柚易汛智推官9 小时前
MySQL到达梦数据库快速替换操作指南
数据库·mysql·酷柚易汛
PawSQL9 小时前
企业级SQL审核优化工具 PawSQL 介绍(3)- 审核工单管理
数据库·sql·pawsql·sql审核