"通俗介绍:什么是 Redis ? "

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Redis 是一款内存中的数据存储系统,常用于数据库、缓存、消息中间件和流式引擎。它的特点是速度快,尤其在分布式系统中发挥优势,允许不同进程间共享内存中的数据。相比传统数据库如 MySQL,Redis 访问更快但存储空间有限,适合存储热点数据以提升性能。Redis 也可作为 MySQL 的缓存,但涉及数据同步问题。最初设计目的是作为消息中间件,但现在有更多专门的消息队列系统可选。

刚接触 Redis 的伙伴们可能会因为不熟悉而感到困惑。本文简述 Redis 是什么、有哪些作用的问题,是一篇短浅而入门级别的文章。


Redis官网:Redis


打开 Redis 官网可以看到,官方对 Redis 的介绍是这样的:The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.




关于 Redis 的定位和作用,由这个官方定义可知:


in-memory data store:Redis的数据是在内存中存储的。

used as a database, cache, streaming engine, and message broker:Redis通常被用作数据库、缓存、流式引擎和消息中间件。

下面就从以上几个角度来简单说明。


一、数据在内存中存储


Redis的数据存储是在内存中的。


那么问题来了:既然是将值存储在内存中,那普通的变量也可以做到,为什么还需要 Redis 呢?


因为事实上,Redis的使用场景是分布式系统而非单机程序。只有在分布式系统中它才能真正发挥威力。如果只是单机程序,直接通过变量存储数据的方式是比Redis更优的选择,但在分布式系统中,一个分布式系统势必涉及到多个进程,这多个进程在不同的主机上,由于进程的隔离性,此时要直接访问其它进程内存中的变量是很困难的,Redis正是对这个需求点进行了封装。


进程间通信往往依靠网络。网络这种方式既可以实现同一个主机的多个进程间通信,还能实现跨主机的进程通信。Redis 基于网络,可以把自己内存中的变量给别的进程(甚至别的主机的进程)使用。


总而言之,Redis的使用紧紧围绕三个字:分布式。抛开分布式系统,Redis就没有太大的优势了。


二、Redis用作数据库


MySQL是大家更为熟知的一种数据库。MySQL确实可以在一个分布式系统中帮助我们存储数据,同时也能提供丰富和强大的功能,但它有一个最大的问题:访问速度比较慢。如今一些互联网产品对于性能的要求是很高的,这样一来,MySQL就显得有些力不从心。


而Redis相较于MySQL的优点就是更快,而且快很多。因为MySQL的数据存储在硬盘上,而Redis的数据在内存中。内存的访问速度比硬盘的访问速度快几个数量级,差距非常大。另一方面,MySQL为了支持像数据约束等一系列机制,往往会在一次查询中涉及多次的IO访问,让本不富裕的性能更加雪上加霜。(由于Redis和MySQL支持的功能和使用的场景都有一定差异,所以很难定量地衡量二者的性能如何,只能从定性的角度知道Redis快很多。)


这样一来,Redis也就有了用作数据库进行数据存储的市场。


但是作为数据库,Redis也有缺点。它和MySQL相比最大的劣势在于存储空间有限。内存虽然访问速度快,但是容量小。因此,如果对于性能的要求并不是那么高,但同时又希望以更低的成本存储更多的数据,MySQL是首选。MySQL也比Redis提供了更丰富的增删改查能力。


Redis更“快”,MySQL更“大”,那么能不能做到又大又快?


这就是Redis的又一个用途:缓存。


三、Redis用作cache


要做到“又大又快”,典型的方案是把Redis和MySQL结合起来使用,把Redis作为MySQL的cache。


使用方式是把热点数据用Redis来存储,把全量数据使用MySQL来存储。依照“二八原则”,即20%热点数据往往能满足80%的访问需求。我们把一部分热点数据拿出来放在Redis里,当用户访问这些常用数据时,访问的是Redis,就会更快。同时全量数据仍然存储在MySQL中。


Redis在分布式系统中最主要的作用就是扮演缓存的角色。


这样做的代价是,系统的复杂程度大大提升了。而且如果数据发生修改,还涉及到Redis和MySQL之间的数据同步问题。


究竟如何安排,需要看实际的应用场景,在哪个场景下怎样进行的安排更加合适,没有哪一种方式是“万金油”。


四、Redis用作消息中间件


Redis被研发出来的初心其实就是用来作为消息中间件(消息队列),实现分布式系统下的生产者消费者模型。(注意:此处的消息队列与Linux进程间通信的那个消息队列不是一回事。)


2008 年,Redis 的作者 Salvatore Sanfilippo 在开发⼀个叫 LLOOGG 的网站时,需要实现⼀个高性能的队列功能,最开始是使用 MySQL 来实现的,但后来发现无论怎么优化 SQL 语句等都不能使网站的性能提高上去,再加上自己囊中羞涩,于是他决定自己做一个专属于LLOOGG 的数据库,这个就是 Redis 的前身。

但实际中,以redis作为消息队列的反而比较少。业界也有很多知名的消息队列,如 RabbitMQ, Kafka,RocketMQ等。这些消息队列的功能比 Redis 更强大更丰富。虽然Redis也提供了消息队列的功能,甚至在Redis最新的几个版本中也有相关特性在更新,但即使如此,实际中也很少直接用Redis作为消息队列。

如果当前场景中对于消息队列的功能依赖的不是很多,并且又不想引入额外的依赖了,那么Redis可以作为一个选择。



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
9天前
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
|
9月前
|
存储 缓存 NoSQL
【Redis从头学-15】三个通俗例子带你理解Redis缓存击穿、缓存穿透、缓存雪崩并从思路引导三者的解决方案
【Redis从头学-15】三个通俗例子带你理解Redis缓存击穿、缓存穿透、缓存雪崩并从思路引导三者的解决方案
58 0
|
1月前
|
NoSQL Linux 网络安全
Linux安装Redis(详细教程)
Linux安装Redis(详细教程)
100 2
|
1月前
|
NoSQL Linux Redis
Redis -- 安装客户端redis-plus-plus
Redis -- 安装客户端redis-plus-plus
57 0
|
8天前
|
NoSQL Redis Windows
win10下Redis安装、启动教程
win10下Redis安装、启动教程
17 2
|
9天前
|
消息中间件 缓存 NoSQL
Redis单实例安装
Redis单实例安装
17 1
|
12天前
|
NoSQL Linux 网络安全
基于 centOS7 的 redis 安装
基于 centOS7 的 redis 安装
47 1
|
17小时前
|
NoSQL 关系型数据库 MySQL
一文学会dockers安装 (附docker安装MySQL、Redis)
一文学会dockers安装 (附docker安装MySQL、Redis)
8 0
|
22天前
|
NoSQL Ubuntu Java
【Redis】 在 Ubuntu 上安装 Redis
【Redis】 在 Ubuntu 上安装 Redis
|
1天前
|
NoSQL Linux 网络安全
centos安装Redis
centos安装Redis
8 0