Redis (Remote Dictionary Server) 是一个快速的数据库,它主要用于内存缓存,通过减少磁盘和/或网络读写操作来减轻服务器负载。
Redis 的主要用途包括:
- 缓存高频访问的数据,以加快访问速度。
- Web 应用程序的会话存储
- 实时分析和排行榜。
- 在后台作业系统中管理队列或任务列表。
Redis 是如何工作的?
Redis 充当数据库与客户端之间的缓存层,旨在加速数据访问并减轻主数据库的负载。当客户端请求数据时,API 网关会将请求转发给 Redis。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20250702114605187766/workingofredisserver.webp">workingofredisserverRedis 的工作原理
如果 Redis 拥有该数据(缓存命中),它会通过 API 网关迅速将其返回给客户端。如果数据缺失(缓存未命中),Redis 会从数据库中检索该数据,将其存储在缓存中以备将来请求,然后再通过 API 网关将其传递给客户端。这种流程加快了响应时间并减轻了数据库的负载。
> 在开始学习 Redis 之前,我们需要先在系统中 安装 redis。
现在让我们通过一个示例来理解这一点:
Python
CODEBLOCK_6e7f16b4
输出结果
理解上面的示例:
import redis
这一行导入了 redis Python 库,它允许我们从 Python 代码与 Redis 服务器进行通信。
r = redis.Redis(host=‘localhost‘, port=6379, db=0)
在这里,我们正在创建一个 Redis 连接:
host=‘localhost‘:连接到运行在你本地计算机上的 Redisport=6379:Redis 监听的默认端口db=0:Redis 支持多个从 0 开始编号的逻辑数据库,这里你使用的是数据库 0
因此,这个 "r" 变量现在就是你与 Redis 交互的句柄。
r.set(‘name‘, ‘Alia‘)
这一行在 Redis 中存储了键 INLINECODE107abf92 和对应的值 INLINECODEcd000c26。
print(r.get(‘name‘).decode(‘utf-8‘))
这会从 Redis 中检索存储在键 INLINECODEb04fe03a 下的值(即 INLINECODEa04c093a)。
- INLINECODE5740a387 以字节格式返回值,例如 INLINECODE1a815957
.decode(‘utf-8‘)将这些字节转换为普通字符串,从而打印出 Alia。
> 注意: 在本例中,Redis 与 Python 集成在一起,但我们也可以通过使用相应的 Redis 客户端库,在 Java、JavaScript (Node.js)、Go、Ruby、C# (.NET)、PHP 等许多其他编程语言中实现 Redis。
什么时候应该使用 Redis 服务器?
假设我们有一个 MySQL 数据库,并且我们不断地查询数据库,这需要从辅助存储中读取数据,计算结果,然后返回结果。
如果数据库中的数据变化不大,我们可以直接将查询结果存储在 Redis 服务器中。这样,与其查询可能需要 100-1000 毫秒的数据库,不如直接检查查询结果是否已经存在于 Redis 中。如果存在,直接返回结果,这将快得多,因为数据已经在内存中准备好了。
> 注意: 在消息应用中,我们可以使用 Redis 利用内置的列表数据结构,来存储用户发送和接收的最后五条消息。
为什么 Redis 如此之快?
Redis 之所以快,是因为它将所有数据保存在内存中而不是磁盘上,因此它不会浪费时间从硬盘读取数据。它还使用单线程配合事件循环来处理命令,这避免了管理多线程带来的复杂性和延迟。
此外,Redis 使用了高度优化的数据结构,以及一种名为 RESP 的简单、轻量级通信协议来进行网络通信。这些设计选择意味着 Redis 可以同时处理大量请求,延迟极低,并且几乎可以即时响应。
> 阅读更多:为什么 Redis 如此之快且如此流行?
Redis 与 MongoDB 的区别
Redis 和 MongoDB 都是广泛使用的数据库,但它们之间存在一些你需要了解的关键区别:
Redis
—
内存中的键值存储,NoSQL
将数据存储为键值对、字符串、集合、列表、哈希等
主要基于内存,但也可以将数据持久化到磁盘 (RDB, AOF)
由于内存存储,速度极快