Redis vs Memcache

对于Memcache和Redis我有点新意,我试图理解两者之间的区别,以及每个实际是什么。

正如我已经向我解释的那样,Memcache是​​一个数据库caching解决scheme。 来自频繁运行的查询的数据被caching以在稍后的时间点被重新使用以加快响应时间。 这是一个准确的描述?

Redis呢? 这是否以类似的方式工作? 换句话说,它是否caching从后端数据库收到的数据? 我一直在读Redis是一个关键的价值存储解决scheme,对我来说听起来更像是数据库服务器和数据库caching解决scheme的替代品。

任何帮助了解每个是什么,以及有什么区别将不胜感激。

感谢Brad

两者之间确实有一个关键的区别。

  • Redis =键/值caching
  • Memcached =对象caching

无论你想扔给他们什么都可以被操纵。 这些系统和其他许多类似系统的最终目标是提供一个分布式的内存caching,以便以更快的速度存储您需要访问的任何数据。 这基本上将数据库降级到一个简单的数据存储库以便保存和长期存储,而内存中的高速caching机制可以将尽可能多的数据卸载并移动到堆栈的前端,从而减less检索时间和延迟数据。

正如你所指出的,Redis实际上只是用于Key和Valuecaching,但是我已经看到之前存储的整个对象。 它确实适合于数据库性能改善。

Memcached更灵活一点,它可以存储任何你想要的东西。 它也是任何分布式内存caching应用程序的顶级竞争者之一。 还有其他的系统也是这样做的。

无论哪种方式,必须写入软件来加载这两个caching中的任何一个。 一些现有的软件可能存在于你想要的任何目的,例如将一张表加载到内存中,但是这些软件对于每种情况都是特定的。

Memcached是一个内存中的键/值存储。 Redis可以这样使用,但更多。

Memcached和Redis类似

两者都能够caching数据库结果或其他任何您可能想要caching的内容。

两者都能够存储一个键的简单string值。 以前的回答指出memcached更灵活,这是错误的。 将“任何你想要的”存储到memcached中需要把对象和序列化/编组成string。 Redis同样支持这一点。 即使在存储序列化对象时,Redis通常也更灵活,因为默认的最大值大得多(1MB vs 512MB)。

这两个存储在内存中的值是非常快速和高效的,通常瓶颈在networking带宽或内存I / O没有繁重的CPU使用情况。 两者都是高度可扩展的。 这两种pipe理和监控都有很好的工具。 两种商业集群解决scheme都存在。 从3.0开始,redis包含内置的集群支持,这是memcached不提供的。

实际上memcached的每个用例都可以通过redis来解决,有时甚至更好。 Memcached是一款非常棒的软件,但其特性和优势已经成为Redis的一个子集。

Redis Superset

它们不同之处在于redis提供的大量附加function,以及这些function启用的其他function。

Redis不仅仅是一个关键/价值存储。 这是一个内存数据结构服务器。 键可以像memcached一样分配简单的string,但是也可以存储哈希,列表,集合或sorting集合。 这些额外的数据types是高效和优化的,有许多命令可以利用它们 ,从而实现一个简单的键/值存储不提供的访问模式。

Redis默认提供持久化 ,内置和开启。 这意味着redis默认是一个真正的数据库,而不是像memcached这样的简单的易失性caching。 您的数据将在您重新启动时在那里。 有很多简单的pipe理选项可以用来调整持久性以最好地解决你的用例,或者如果你想要的只是一个易失性的caching,就把它关掉。

Redis提供pub / sub (发布/订阅)。 这使您可以创build频道,并让一个或多个客户端订阅它们,从而实现高效的高速实时通信机制。 这对于进程间,应用程序间或服务器间的通信来说是一个很好的解决scheme。

Redis提供Lua脚本支持 。 这可以让你做各种新的事情。 一个重要的例子就是以primefaces方式执行多个依赖的redis命令,并且只需要一次redis命令。 Lua脚本很容易拾取,脚本可以高效且自动地运行。

结论

除非你的项目已经在使用memcached,否则你的组织在memcached上有很大的投资,你不应该使用它。 Redis可以在自己的游戏中与Memcached相媲美,并使整个世界变得新鲜。 即使您的问题可以通过这两种工具同样得到解决,请使用为您还不能预见的问题提供更多灵活性的工具:redis。 您也将select更加积极地开发和维护的工具,并且正在更快地改进。 Memcached不会去任何地方也不应该这样做,但是除非您在memcached中有重要的知识或基础设施投资,否则很难将其用于任何新事物。

如果您已经在使用memcached,切换到redis可能会有很多工作,但收获甚微。 仔细评估redis,并根据您的情况决定切换成本是否超过收益。 如果是这样,坚持使用memcached。 它仍然是一个伟大的,稳定的,硬化的软件。