Redis 与 Memcached 的比较

79 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

Redis和Memcached一直是评选中的热门话题。很多人不愿意,选择Redis。,认为Redis IO性能高。其实没有必要看什么应用场景。然后让我们来探索它们的异同,然后分析它们。

首先,Redis和Memcached的相似之处。 让我们从两者的相似之处开始。Memcached和Redis都属于内存中键值数据存储方案。它们都依赖于数据管理解决方案家族中的NoSQL,并且都基于相同的键值数据模型。双方都选择将所有数据保存在内存中,这自然使它们成为理想的缓冲层实现。从性能的角度来看,这两种类型的数据存储机制也有许多共同点,包括具有几乎相同的性能特性(和指标),并且高度关注工作负载数据吞吐量和延迟。

除了相同的内存中键值数据存储方案,Memcached With Redis也是相当成熟和流行的开源项目。Memcached最初是由Brad Fitzpatrick在2003年开发的,它被直接用于LiveJournal约会网站。在此之后,Memcached被用C重写(最初的实现是Perl)并投入公共领域,并逐渐演变成现代Web应用程序的构建块。Memcached项目目前的开发工作主要集中在其运行稳定性和优化效果上,不再积极创造更多的新功能。

Redis由Salvatore Sanfilippo于2009年创建,直到今天,Sanfilippo仍然是该项目的主要开发人员和唯一维护者。Redis有时也被称为“Memcached的增强版”。从Memcached来看,这样的评估是从大量有价值的经验中得出的,这并不奇怪。Redis在功能多样性方面优于Memcached,这使得播放器更强大和灵活,但它比后者更复杂。

Memcached With Redis作为被许多公司采用并部署在无数关键生产任务环境中的两种解决方案,有一个客户端库支持任何可行的编程语言,并且两者都包含在开发人员使用的各种库和包中。事实上,现在我们甚至发现很难找到一个不包含Memcached的集合。或Redis Web内置支持机制。

Memcached With Redis为什么这么流行?除了两者都有出色的实际效果外,彼此起步的困难是另一个很大的加分项。无论是Memcached还是Redis,它的易用性在开发人员中是众所周知的。我们只需要几分钟就可以完成安装,并让他们开始顺畅地使用应用程序。换句话说,只需少量的时间和精力,您就可以立即获得有效的性能提升-具体地说,性能直接进入新的水平。面对如此简单却能带来巨大利益的解决方案,谁能抵挡住它们的诱惑呢?

第二,在什么情况下应该使用Memcached 相对于Redis来说,它是比较晚的,有更多的特性,所以开发人员通常把它作为默认的选择。然而,有两种特殊的场景仍然是Memcached。一个人的世界。第一种是缓存小的静态数据,最具代表性的例子就是HTML。代码段。Memcached内部内存管理机制不像Redis那样复杂,而是更实用——这是因为Memcached在处理元数据时消耗的内存资源相对较少。作为Memcached唯一支持的数据类型,字符串非常适合保存只需要读取的数据,因为字符串本身不需要进一步处理。

除此之外,Memcached在向外扩展方面也比Redis更有优势。由于其设计趋势和相对简单的功能集,Memcached实现扩展的难度比Redis低很多。然而,根据我们所了解到的情况,已经有许多经过测试的有效的Redis解决方案。扩展到多个服务器,它即将发布的3.0版本(感兴趣的朋友可以点击这里查看它的发布说明)将包括一个专门用于向外扩展场景的内置集群机制。

第三,在什么情况下应该使用Redis 除非你需要考虑Memcached对特定限定条件的特定依赖(比如处理传统应用程序),或者如果你的实际用例属于上面提到的两种场景之一,请选择Redis并直接应用它。通过Redis带来的优秀缓存解决方案,我们拥有强大的处理能力——比如微调缓存内容和持久性的能力——以及出色的整体执行效率。

Redis几乎在缓存管理工作的各个方面都显示出明显的优势。这种缓存方案使用所谓的数据回收机制,从内存中删除旧数据,为新数据提供必要的缓存空间。Memcached数据恢复机制采用LRU(即最近使用率最低)算法,经常任意删除与新数据系统相似的原始内容。相比之下,Redis允许用户更精确地微调控制,使用六种不同的回收策略来准确地提高缓存资源的实际利用率。Redis还使用了更复杂的内存管理和回收对象替代品。

Redis也为我们提供了最大的灵活性,这样管理员就有足够的平台来管理缓存对象。为此,Memcached将键名限制为250字节,值限制为不超过1MB,并且仅适用于普通字符串。Redis密钥名和密钥值的最大上限均为512MB,支持二进制格式。Redis支持六种数据类型,对数据的缓存和操作更加智能,相当于为应用开发者打开了大门。

相对于将对象保存为序列化的字符串,Redis允许开发人员以散列的方式散列对象字段和值,并使用单个键管理它们。Redis哈希机制的存在确保了开发人员不必经历获取完整字符串、反序列化、更新值、重新序列化对象,并在每次值更新后将它们替换为缓存中的完整字符串的复杂过程——这也意味着资源消耗减少,性能显著提高。Redis支持的其他数据类型,如列表和集,也可以用于实现更复杂的缓存管理模式。

Redis的另一个重要优势是它持有的数据具有透明性,这意味着服务器可以直接操纵数据。Redis提供了160多个可用命令,其中大部分用于实现数据处理操作,并通过服务器端脚本将逻辑嵌入到数据存储系统中。这些内置的命令和用户脚本带来了巨大的灵活性,足以直接帮助每个人在Redis。内部完成数据处理任务——无需在网络中的其他专门处理系统之间来回移动数据。

Redis还提供了一个可选的和单独可调的数据持久性方案,用于在计划或计划外故障发生后重定向缓存的内容。尽管我们倾向于强调缓存中数据的易变性和可传递性,但在某些缓存场景中,将数据持久化在磁盘上仍然是非常实用的。该机制可以在设备重启后,快速将存储在磁盘上的数据重新加载到缓存中,大大缩短了缓存预热时间,并根据主数据存储内容重新评估当前缓存内容。

最后但并非最不重要的,Redis可以提供复制功能。复制特性旨在帮助缓存体系结构实现高可用性骗局