memcache、memcached和redis之间的区别

6

我们目前使用memcache来存储会话数据。我听说memcached或redis更好。我需要了解它们之间的区别,从而了解哪一个是最佳选择。


4
在PHP中,Memcache和memcached是不同的扩展程序,用于访问内存缓存;而Memcache和Redis是不同的键/值缓存服务器。 - Mark Baker
2
请参考 https://dev59.com/AHM_5IYBdhLWcg3wSBEU 以比较memcache和memcached扩展。 - Mark Baker
3
请参考网址 https://dev59.com/TGkv5IYBdhLWcg3wfA4P ,了解关于memcache 和 redis 缓存服务器之间的比较。 - Mark Baker
答案取决于您的用例。您在Memcache中存储什么?至于通用差异,您可以查看下面@ashiina的帖子。 - Manu Manjunath
3个回答

11

这个回答非常详细地解释了它们之间的区别。 Memcached vs. Redis?

但如果你想要一个简单的答案,那就是:

Redis

  • 持久化(即使服务器关闭/重启,数据仍然存在,因为它被写入磁盘,不像memcached)
  • 支持许多数据类型(列表,集合等...不仅仅是像memcached一样的简单get/set/del操作)

Memcached

  • 快速
  • 易于使用

所以基本上,如果你不真正关心Redis的这两个主要优势,你应该使用memcached。


1
对于您的用例,我会说Redis更好。因为您将其用于存储用户会话数据,所以可能需要对会话的单个字段执行操作,而Redis哈希数据类型非常适合此类操作。 您可以在这篇文章中找到它们之间非常详细的比较:Redis VS Memcached: Which one to choose?

0
它们有些相似,但也有不同的用途。
正如其名称所示,Memcached用于缓存数据,这就是它应该被使用的方式。例如,如果一个Memcached服务器崩溃,你应该能够接受部分缓存丢失。
最初,Memcached的设计目的是,如果你的服务在多个服务器上运行,那么可能有一些未被使用的内存,为什么不将其用于缓存整个应用程序呢?
另一方面,Redis代表远程字典服务器。它用于存储一些共享状态的中央服务。看起来很多公司甚至存储了关键数据(这让我有点担心,尤其是在阅读了对其进行的Jepsen分析之后。最好将其视为缓存,不要存储任何无法从其他来源重建的东西)。
Cristiano Vicente在这里发布了一个比较的链接,但在阅读之后,我觉得它对Redis有很大偏见,也许作者没有花太多时间使用Memcached。
以下是我注意到的几点:

Redis可以水平扩展,而Memcached可以垂直扩展

如果说有什么区别的话,恰恰相反。

Memcached服务器独立工作,客户端库使用会合算法来确定数据存储在哪个服务器上。它可以处理数千个服务器(这就是为什么除了TCP memcached还支持UDP协议的原因,在不实际打开这么多连接的情况下)。因为它是多线程的,所以在性能方面,在运行redis的同一台机器上将更有效地利用硬件。

Redis传统上作为单个服务器开始以确保一致性(并且使用单个线程编程也更容易)。为了适应那些使用重要数据的人,它可以定期将其状态转储到磁盘,或者存储操作日志,然后可以在服务启动时重新创建。

还有集群,您可以设置多个服务器进行阴影和故障转移。这使得客户端上的可扩展性更加容易,因为服务器将数据转发到正确的服务器。但是,这种方法仍然比memcached表现差,因为memcache客户端直接向正确的服务器发送数据。正如前面提到的,从jepsen测试中redis表现不佳,但我很高兴他们更新了文档以说明redis不提供强一致性。

据说正在进行redis-raft的工作,可能会尝试修复它,但据我所知,尚未发布。

memcached只有LRU淘汰策略,而redis有6种不同的策略。
这会让人误以为memcached不支持TTL,实际上它允许使用相对或绝对时间(特定日期)来指定每个项目的TTL,以便在指定时间后将其删除。
此外,这6种不同的策略可以归结为:
- 无淘汰 - LRU - 随机
无淘汰并没有太多意义(除非你不将redis用作缓存,这不是一个好主意)。当数据无法以可预测的方式访问且不想浪费资源计算LRU时,随机策略可能是合理的选择。
memcached没有类型这一说法实际上是正确的,但值得补充的是,对于每个键,您还可以指定一个标志,该标志是一个16位数字,在获取键时可以获得,用于告知如何处理数据。append和prepend命令可以实现类似列表的功能,incr/decr可以处理整数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接