【Redis】初识Redis(定义、特征、使用场景)
目录
- 一、Redis的定义
- 1.1 Redis的介绍
- 1.2 Redis在内存中存储数据
- 1.3 Redis作为数据库
- 1.4 Redis作为缓存
- 1.5 Redis作为消息中间件
- 二、Redis的特性
- 2.1 内存数据结构(ln-memory data structures)
- 2.2 可编程性(Programmability)
- 2.3 可扩展性(Extensibility)
- 2.4 持久化(Persistence)
- 2.5 集群(Clustering)
- 2.6 高可用(High Availability)
- 2.7 快(fast)
- 结尾
一、Redis的定义
这条链接就是Redis的官网链接:Redis官网
1.1 Redis的介绍
下图就是Redis的官方介绍,Redis是一个开源项目,Redis是内存数据存储系统,被数百万开发者下载,作为缓存、数据库、流处理引擎和消息中间件(消息队列)使用。
1.2 Redis在内存中存储数据
Redis是内存数据管理系统,也就是Redis存储的数据是保存在内存中的,当我们看到在内存中存储数据,就会想到定义变量就可以在内存中存储数据了,为什么还需要使用Redis呢?
在分布式系统的情况下使用Redis才能发挥出它最大的价值,在单机程序的情况下,直接定义变量对比Redis是一个更好的选择。
在分布式系统中,势必会遇到多进程的情况,我们知道进程有一个特性就是隔离性,一个进程中的数据,其他是无法获取到的,想要获取就只能通过进程间通信的方式。分布式系统是多个独立的主机进行协同工作的,所以在分布式系统中就会有在不同主机上的不同进程协同工作的情况,而Redis就是基于网络实现进程间通信的,通过网络实现进程间通信可以做到将内存数据交给同主机上的进程使用,也可以交给不同主机上的进程使用。
1.3 Redis作为数据库
当我们看到数据库的时候,一般就会想到MySQL,因为MySQL是将数据存储在磁盘中的,所以导致MySQL有一个缺点就是访问速度慢,而又因为数据是存储在磁盘中的,所以MySQL能存储数据更多。所以如果产品对性能的要求不是很高的情况下,还是会使用MySQL。
Redis是将数据保存到内存中的,所以相比于MySQL来说,Redis访问速度会快很多,相对应的内存比磁盘要小,所以Redis能够存储数据会小很多。所以如果产品对性能的要求很高的情况下,还是会使用Redis。
1.4 Redis作为缓存
上面我们讲到MySQL访问数据慢,但存储数据的数量多,Redis访问数据块,但存储数据的数量少。那么有没有相对适中的方案呢?
若我们想访问数据的速度又快,存储数据的数量又多,那么就可以将MySQL和Redis合并起来使用,让MySQL作为数据库,Redis作为缓存。将所有的数据都存储在MySQL中,将部分常用的数据保存在Redis中。Redis中的数据的数据能够保证大部分时间数据的访问,而少部分数据访问就需要去MySQL中访问了。将MySQL和Redis结合使用就可以做到让系统的存储数据的数量多,访问速度快了。但是这样做就会使系统的复杂程度增加,并且遇到数据修改的时候,还需要解决MySQL和Redis之间数据同步的问题。
1.5 Redis作为消息中间件
Redis可以作为消息中间件(消息队列),用来实现分布式系统下的生产者消费者模型。但是现在很少使用Redis作为消息中间件进行使用,因为业界已经有了更专业的消息中间件使用。如果目前系统已经使用了Redis,还需要使用消息中间件并且使用的功能并不复杂,也不想引入其他中间件,那么Redis作为消息中间件也是一个不错的选择。
二、Redis的特性
2.1 内存数据结构(ln-memory data structures)
Redis 的核心优势在于其内存存储和丰富的数据结构,它支持String(字符串)、Hash(哈希表)、List(列表)、Set(集合)、Sorted Set(有序集合)等数据结构。
MySQL数据库是以“表”的方式存储组织数据的,以“表”的方式存储组织数据的数据库,我们称之为“关系型数据库”。
Redis作为数据库的时候,是以“键值对”的方式存储组织数据的,以非“表”的方式存储组织数据的数据库,我们称之为“非关系型数据库”。
Redis以“键值对”的方式存储组织数据,那么数据的key一定是String类型的,而value则可以是上述的任意一个数据结构。
2.2 可编程性(Programmability)
针对Redis的操作,可以通过简单的交互命令进行操作,也可以通过脚本的方式批量的执行一些操作。
2.3 可扩展性(Extensibility)
可以在Redis的功能基础上进行扩展,Redis提供了一组API,可以通过C/C++、Rust等语言编写Redis扩展(本质上就是动态链接库)。例如:Redis不支持搜索二叉树,就可以通过扩展来让Redis使用二叉搜索树。
Redis本身已经提供了很多数据结构,通过扩展可以让Redis支持更多的数据结构。
2.4 持久化(Persistence)
Redis是将数据存在在内存中的,而内存中的数据是容易丢失的,例如:进程退出、系统重启等都会导致内存数据丢失。
为了解决这个问题,Redis会将数据存储在磁盘中,磁盘相当于将内存中的数据进行备份,如果Redis重启,在重启的过程中可以加载磁盘中的数据,使Redis中内存的数据恢复到重启之前的状态。
2.5 集群(Clustering)
Redis作为分布式中的中间件,能够支持集群是很关键的。一个Redis能够存储的数据是有限的,当引入多台主机,部署多个Redis节点,每个Redis节点中都存储部分数据,那么Redis能够存储的数据就更多了。
2.6 高可用(High Availability)
高可用也就意味着备份和冗余,Redis本身是支持“主从同步”机制的,如果在主节点崩溃的情况下,从节点是可以承担起主节点的责任的,这也就提高了系统的可用性了。
2.7 快(fast)
Redis快的原因有以下几点:
- Redis的数据是存储在内存中的,比将数据存储在磁盘的数据库要快
- Redis核心功能都是一些比较简单的逻辑
- 从网络角度上来看,Redis使用了I/O多路复用的方式
- Redis使用了单线程模型,减少了不必要的线程之间的竞争开销
结尾
如果有什么建议和疑问,或是有什么错误,大家可以在评论区中提出。
希望大家以后也能和我一起进步!!🌹🌹
如果这篇文章对你有用的话,希望大家给一个三连支持一下!!🌹🌹