在这个现代技术时代,没有人喜欢等待很长时间才能看到他们的搜索结果,如果您正在玩游戏,您可能希望查看实时更新的排行榜。所有这些需求都需要一个高性能且快速的解决方案,这有助于我们更快地访问数据,Redis 是使这一切成为可能的解决方案。
什么是Redis?
Redis 实际上代表远程词典服务器。
它基本上是一种数据结构存储,将数据存储在计算机系统的主存储器中,它使用键值对来存储数据,就像 Java 中的 HashMap、Python 中的字典或 JavaScript 中的对象一样,这也是它有时被称为 NoSQL 数据库的原因。
Redis 是一个开源项目,社区蓬勃发展。
Redis的特点
内存存储
通常所有数据库都存储和访问来自硬盘和 SSD 的数据,它们是二级存储器,众所周知,主内存比二级内存快,因为它可以被处理器直接访问。
现在,由于 Redis 将其数据存储在主内存上,因此读取和写入的速度比将数据存储在磁盘上的数据库更快。

这也是为什么 Redis 在许多应用程序中被用作缓存以快速提供结果的原因,但是我们可以将数据直接存储在主内存或系统缓存中,那么我们就不需要Redis了,对吧?
正如您将看到的,Redis 不仅仅是“缓存”。
高级数据结构
Redis 将其数据存储在键值对中,并且能够使用各种数据结构来存储数据,例如:
- Strings
- Lists
- Sets
- Sorted Sets
- Hashes
- Bit Arrays
- HyperLogLogs
- Streams

如果您希望在不使用 Redis 的情况下将数据直接存储在内存中,这是不可能的,甚至 Memcached,这是另一种非常流行的用作缓存机制的内存键值存储,也只支持字符串,而不支持 Redis 提供的这种数据结构。
作为开发者,你肯定用过其中的一些数据结构,这也让Redis更容易使用和实现。
这里不需要序列化,因为数据直接以您正在编码的数据结构的形式存储,如果不是这种情况,您必须先将数据转换或序列化为字符串,然后再将其存储到任何其他数据存储中或数据库。
坚持
直接使用主内存或系统缓存的另一个缺点是数据易失,一旦没有电源或系统关闭,主存储器上的所有数据都会被清除或清除。
Redis 提供了两种机制来帮助防止这种情况 – 快照和 AOF(仅附加文件),它们基本上是二级内存上 Redis 数据存储的备份,因此如果出现系统故障或断电,通过从磁盘上的这些备份加载数据,它可以调用数据库的当前状态。
复制
Redis 采用主从(primary-replica)架构,数据可以复制到多个副本服务器,这提高了读取性能,因为请求可以在不同的服务器之间拆分,这也有助于在主服务器或主服务器发生中断时更快地恢复。
大力支持
作为一个拥有多元化社区的开源项目,Redis 没有技术限制,因为它基于开放标准,并支持开放数据格式,它还支持丰富的客户端集,支持 40 多种编程语言。
由于 Redis 以各种数据结构的形式将所有内容存储在内存中,并且还提供持久性和复制服务器的能力,因此在与其他无法与 Redis 相同用途的数据库/缓存相比时,它脱颖而出。
这是Redis与其他主要数据库和键值存储的快速比较。

作为消息代理
这是当有一个频道或一组用户时,他们可以推送或查看消息,例如 Whatsapp 组或 Telegram 频道,这是一个 Pub/Sub 模型,其中有发布者和订阅者。每次创建或发布新消息时,所有订阅者或侦听器都会收到该消息。
Redis 支持此功能并且速度非常快。
作为会话存储
Redis 还用于在应用程序中维护和存储用户的会话。
就像在电子商务应用程序中一样,您希望购物车中的商品即使在您关闭网站时也能保留下来,存储用户元数据(如配置文件和凭据)也很常见,Redis 是这些场景中最受欢迎的选择。
何时避免使用 Redis
使用Redis作为唯一数据库
由于 Redis 是内存中的键值存储,因此所有数据都必须适合内存,它的存储大小取决于系统中存在多少 RAM 或主内存,与硬盘相比,它的大小要小得多,但成本更高。
因此,它不应该用作非常大的应用程序的唯一数据库。
Redis 主要与其他 RDBMS 一起使用,通过提供缓存机制来补充它们。
使用 Redis 作为事务服务器
在内存中存储的另一个陷阱是安全性,尽管Redis提供了持久化解决方案,但它仍然不如真正的事务服务器安全,后者提供重做/撤消日志记录、块校验和、时间点恢复、闪回功能等。
使用 Redis 作为关系数据库
Redis 是一种数据结构服务器,与任何 RDBMS 不同,它不提供查询语言,也不支持任何关系代数,因此,开发人员必须预测所有的数据访问,并需要定义适当的数据访问路径,这意味着失去了很多灵活性。
Redis 扩展起来更复杂
由于 Redis 是同步和单线程的,因此它没有充分利用处理器的所有内核,这使得扩展变得更加困难或复杂,因为必须部署和启动多个 Redis 实例(形成集群)。
Redis 的替代品
Redis 在缓存方面的主要竞争对手是 Memcached,它提供多线程。
MongoDB 是 NoSQL 数据库的另一种选择,因为它使用自己的查询语言提供面向文档的存储。
RabbitMQ 是最常用的消息代理之一,尽管它更复杂,但它比 Redis 更持久和更受欢迎。
Cassandra 是一个分区行存储,其中行被组织成具有所需主键的表,这因其易于扩展的功能和更具容错性而被广泛使用。
最后的想法
如您所见,Redis 基本上是一把瑞士军刀,在现实世界中有多个使用场景,希望使用了Redis,您的系统能够有所改进!
暂无评论内容