我对 Memcache 和 Redis 有点陌生,我试图了解两者之间的区别以及它们的实际含义。
正如我向我解释的那样,Memcache 是一种数据库缓存解决方案。来自频繁运行的查询的数据被缓存,以便在以后重新使用以加快响应时间。这是准确的描述吗?
Redis呢?这是否以类似的方式工作?换句话说,它是否缓存从后端数据库接收的数据?我一直在读 Redis 是一个键值存储解决方案,对我来说,这听起来更像是数据库服务器与数据库缓存解决方案的替代品。
任何帮助理解每个是什么以及有什么区别将不胜感激。
谢谢布拉德
Car*_*auf 11
Memcached 是一种内存键/值存储。Redis 可以这样使用,但远不止于此。
两者都能够缓存数据库结果或您可能想要缓存的任何其他内容。
两者都能够为键存储简单的字符串值。先前的答案指出 memcached 更灵活,这是错误的。将“任何你想要的”存储到 memcached 中涉及获取对象并将它们序列化/编组为字符串。Redis 同样很好地支持这一点。即使在存储序列化对象时,Redis 通常也更加灵活,因为默认最大值大小要大得多(1MB 与 512MB)。
两者都将值存储在内存中并且非常快速和高效,通常会在没有大量 CPU 使用的情况下限制网络带宽或内存 I/O。两者都是高度可扩展的。两者都存在很好的管理和监控工具。两者都存在商业集群解决方案。从 3.0 开始,redis 包括内置的集群支持,而 memcached 不提供。
实际上,redis 可以很好地解决 memcached 的每个用例,有时甚至更好。Memcached 是一款出色的软件,但它的特性和优势都已成为 Redis 的一个子集。
它们的不同之处在于 redis 提供的大量附加功能,以及这些功能支持的其他用例。
Redis 不仅仅是一个键/值存储。它是一个内存数据结构服务器。键可以分配简单的字符串,就像在 memcached 中一样,但它们也可以存储哈希、列表、集合或排序集合。这些额外的数据类型是高效和优化的,有许多命令可以利用它们,实现简单的键/值存储不提供的访问模式。
Redis 提供了持久性,默认是内置的和开启的。这意味着默认情况下 redis 是一个真正的数据库,而不是像 memcached 那样简单的易失性缓存。当您重新启动时,您的数据将在那里。您可以使用许多简单的管理选项来调整持久性以最好地解决您的用例,或者如果您想要的只是易失性缓存,则将其关闭。
Redis的报价的pub / sub(发布/订阅)。这允许您创建频道并让一个或多个客户端订阅它们,从而实现高效的高速实时通信机制。对于进程间、应用程序间或服务器间通信,这可能是一个很好的解决方案。
Redis 提供Lua 脚本支持。这使您可以做各种新事物。一个重要的例子是原子地执行几个依赖的 redis 命令,并且只调用一次 redis。Lua 脚本很容易上手,并且脚本可以高效且原子地运行。
除非您的项目已经在使用 memcached 或者您的组织对 memcached 进行了大量投资,否则您不应使用它。Redis 在自己的游戏中与 memcached 竞争,并开启了一个全新的世界。即使您的问题可以通过两种工具同等解决,请使用为您还无法预见的问题提供更大灵活性的工具:redis。您还将选择开发和维护更积极、改进更快的工具。Memcached 不会也不应该去任何地方,但是除非您对 memcached 有大量的知识或基础设施投资,否则很难证明它被用于任何新事物。
如果您已经在使用 memcached,那么切换到 redis 可能需要做很多工作,但收益甚微。仔细评估 redis 并根据您的情况决定切换的成本是否超过收益。如果是这样,请坚持使用 memcached。它仍然是一个伟大的、稳定的、强化的软件。
两者之间确实有一个关键区别。
两者都可以被操纵来缓存您想要扔给它们的任何内容。这些系统和许多其他类似系统的最终目标是提供分布式内存缓存,以更快地存储您需要访问的任何数据。这本质上将数据库降级为一个简单的数据存储库,用于持久和长期存储,同时内存缓存机制将尽可能多的数据卸载并移动到堆栈的前端,从而减少检索数据的延迟和时间。数据。
正如您所指出的,Redis 实际上只是用于键和值缓存,但我之前见过存储整个对象。然而,它确实有助于数据库性能的提高。
Memcached 更加灵活,因为它几乎可以存储您想要的任何内容。它也是任何分布式内存缓存应用程序的顶级竞争者之一。还有其他系统也可以这样做。
无论哪种方式,都必须编写软件来加载这两个缓存中的任何一个。某些现有软件可能出于您想要的任何目的而存在,例如将表加载到内存中,但这些软件针对每种情况都是特定的。
| 归档时间: |
|
| 查看次数: |
2257 次 |
| 最近记录: |