Redis vs Memcached
一句话:Redis 侧重功能,Memcached 侧重性能
何时使用Memcached
当缓存相对较小的静态数据(例如HTML代码片段)时,Memcached可能更为可取。Memcached的内部内存管理虽然没有Redis那么复杂,但在最简单的用例中效率更高,因为它消耗的元数据内存资源相对较少。字符串(Memcached支持的唯一数据类型)非常适合存储仅读取的数据,因为字符串无需进一步处理。
大数据集通常涉及序列化数据,这总是需要更多的存储空间。虽然Memcached实际上仅限于以序列化形式存储数据,但Redis中的数据结构可以本地存储数据的任何方面,从而减少序列化开销。
Memcached优于Redis的第二种情况是扩展。由于Memcached是多线程的,因此可以通过为其提供更多计算资源来轻松扩展,但是您将丢失部分或全部缓存数据(取决于您是否使用一致性哈希)。Redis主要是单线程的,可以通过群集水平扩展而不会丢失数据。群集是一种有效的扩展解决方案,但它的设置和操作相对复杂。
何时使用Redis
由于其数据结构,您几乎总是希望使用Redis。使用Redis作为缓存,您可以获得大量功能(例如微调缓存内容和持久性的能力)以及更高的整体效率。一旦您使用数据结构,效率提升对于特定的应用场景变得非常大。
Redis的优势在缓存管理的几乎每个方面都很明显。高速缓存采用称为数据过期的机制,通过从内存中删除旧数据来为新数据腾出空间。Memcached的数据过期机制采用最近最少使用的算法,并且有点随意地过期与新数据大小相似的数据。
相比之下,Redis允许对过期进行细粒度控制,让您从六种不同的过期政策中进行选择。Redis还采用了更复杂的内存管理和过期候选选择方法。Redis支持懒惰和主动过期,只有在需要更多空间或主动时才会过期数据。
Redis为您可以缓存的对象提供了更大的灵活性。虽然Memcached将键名限制为250个字节,并且仅使用普通字符串,但Redis允许键名和值各为512MB,并且它们是二进制安全的。此外,Redis有五种主要的数据结构可供选择,通过智能缓存和缓存数据操作为应用程序开发人员开辟了一个可能性的世界。
Memcached、Redis (已禁用集群模式) 和 Redis (已启用集群模式) 的比较摘要
Memcached | Redis (已禁用集群模式) | Redis (已启用集群模式) | |
---|---|---|---|
引擎版本 | 1.4.x | 2.8.x 及更高版本 | 3.2.x 及更高版本 |
数据类型 | 简便 ‡ | 2.8.x - 复杂 * | 3.2.x 及更高版本 - 复杂 |
复杂 | |||
数据分区 | 是 | 否 | 是 |
集群是可修改的 | 是 | 是 | 3.2.10 及更高版本 - 有限 |
在线重新分片 | 否 | 否 | 3.2.10 和后续版本 |
加密 | 否 | 3.2.6、4.0.10 及更高版本 | 3.2.6、4.0.10 及更高版本 |
合规性认证 | |||
合规性认证 FedRAMP HIPAA PCI DSS | 否否否 | 3.2.6、4.0.10 及更高版本3.2.6、4.0.10 及更高版本3.2.6、4.0.10 及更高版本 | 3.2.6、4.0.10 及更高版本3.2.6、4.0.10 及更高版本3.2.6、4.0.10 及更高版本 |
多线程 | 是 | 否 | 否 |
节点类型升级 | 否 | 是 | 否 |
引擎升级 | 是 | 支持 | 是 |
高可用性 (复制) | 否 | 是 | 是 |
自动故障转移 | 否 | 可选 | 必需 |
发布/订阅功能 | 否 | 是 | 是 |
排序集 | 否 | 是 | 是 |
备份与恢复 | 否 | 是 | 是 |
地理空间索引 | 否 | 2.8.x - 否 | 是 |
3.2.x 及更高版本 - 是 | |||
备注: | |||
‡字符串、对象(如数据库) | |||
* 字符串、集、排序集、列表、哈希、位图、hyperloglog | |||
字符串、集、排序集、列表、哈希、位图、hyperloglog、地理空间索引 |
Reference: