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 小时前
2026 年,MySQL 到 SelectDB 同步为何更关注实时、可观测与可校验?
数据库·mysql·数据库管理工具·数据同步·ninedata·selectdb·迁移工具
华科易迅7 小时前
MybatisPlus增删改查操作
android·java·数据库
Kethy__8 小时前
计算机中级-数据库系统工程师-计算机体系结构与存储系统
大数据·数据库·数据库系统工程师·计算机中级
SHoM SSER8 小时前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
熬夜的咕噜猫8 小时前
MySQL备份与恢复
数据库·oracle
jnrjian9 小时前
recover database using backup controlfile until cancel 假recover,真一致
数据库·oracle
lifewange9 小时前
java连接Mysql数据库
java·数据库·mysql
大妮哟10 小时前
postgresql数据库日志量异常原因排查
数据库·postgresql·oracle
还是做不到嘛\.10 小时前
Dvwa靶场-SQL Injection (Blind)-基于sqlmap
数据库·sql·web安全
不写八个10 小时前
PHP教程004:php链接mysql数据库
数据库·mysql·php