php memcache、memcached和redis的区别

7qhs6swi  于 2023-08-02  发布在  PHP
关注(0)|答案(3)|浏览(135)

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

gev0vcfq

gev0vcfq1#

这个答案解释得非常透彻。Memcached vs. Redis?
但如果你想要一个简单的答案,这里是:
雷迪斯

  • 持久性(即使服务器关闭/重新启动,您的数据仍然存在,因为它是写入磁盘的,与memcached不同)
  • 支持多种数据类型(列表、集合等)而不是像memcached那样简单的get/set/del)

Memcached

  • 快速
  • 易于使用

所以基本上,如果你不在乎Redis的两大优势,你应该使用memcached。

ipakzgxi

ipakzgxi2#

对于你自己的用例,我会说Redis更好。因为你使用它来存储用户会话数据,你可能需要对会话的单个字段执行操作,而Redis哈希数据类型是完美的。您可以在本文中找到它们之间的详细比较:Redis VS Memcached: Which one to choose?

z9zf31ra

z9zf31ra3#

它们有些相似,但也有不同的用途。
顾名思义,Memcached是用来缓存数据的,这就是它应该如何使用。例如,如果一个memcached服务器宕机,你应该可以接受丢失部分该高速缓存。
Memcached最初的设计是,如果你的服务运行在多个服务器上,那么有些RAM可能不会被使用,那么为什么不使用它来缓存你的整个应用程序呢?
Redis是REmote DIctionary Server的缩写。它适用于中央服务,您可以在其中存储服务的一些共享状态。看起来很多公司甚至持有关键数据(这让我有点担心,特别是在阅读了杰普森的分析之后。最好将其视为缓存,而不存储任何无法从其他源重建的内容)。
Cristiano Vicente在这里发布了一个比较的链接,但是在阅读之后,我觉得它严重偏向于redis,也许作者没有花太多时间使用memcached。
以下是我学到的一些东西:
redis可以水平扩展,而memcached可以垂直扩展
如果有的话,那就是反过来。
Memcached服务器独立工作,客户端库使用rendezvous算法来计算存储数据的服务器。它可以处理数千台服务器(这就是为什么除了TCP之外,memcached还支持UDP协议,当它不实际保持这么多开放连接时)。因为它是多线程的,所以它也可以更有效地使用硬件,所以在运行redis的同一台机器上,性能会更好。
Redis传统上作为单个服务器启动,以确保一致性(并且使用单线程编程也更容易)。为了适应人们使用它的重要数据,它可以定期转储其状态到磁盘,或存储操作日志,然后可以在服务启动时重新创建。
还有集群,您可以设置多个服务器进行着色和故障转移。当服务器将数据转发到正确的服务器时,这使得客户机上的可伸缩性更容易。但是这种方法的性能仍然不如memcached,因为memcache客户端直接将数据发送到正确的服务器。如前所述,从jepsen测试来看,redis的表现不是很好,但我很高兴他们更新了文档,说明redis不提供强一致性。
据说redis-raft上的工作可能会尝试修复它,但据我所知,还没有发布。
memcached只有LRU驱逐策略,而redis有6种不同的策略。
这误导了memcached不支持TTL,当它允许使用相对或绝对(特定日期)为每个项目指定TTL时,应该删除项目。
这6种不同的政策也可以归结为:

  • 不驱逐
  • LRU
  • 随机的

不驱逐没有多大意义(除非你不使用redis作为缓存,这不是一个好主意)。当无法以可预测的方式访问数据并且您不想在计算LRU上浪费资源时,Random是有意义的。
memcached没有类型
这实际上是正确的,但可能值得补充的是,对于每个键,您还可以指定一个16位数字的标志,然后您可以在取回它时获得它,它可以用来告诉数据应该如何处理。append和prepend命令本质上允许有一个列表,incr/decr可以处理整数。

相关问题