Redis Memcached 区别
比较维度 | Memcached | Redis |
---|---|---|
概念对比 | Memcached 是内存中键值存储,最初用于缓存目的。 | Redis 是内存数据结构存储,用作数据库、缓存和消息代理。 |
描述对比 | MemcacheD 很简单,设计简单但功能强大。其简单的设计促进了快速部署,易于夸大,并解决了与大数据缓存相关的许多问题。它具有内置的 API,可提供分布在多台机器上的非常大的哈希表,并使用内部内存管理来提供更高的效率。MemcacheD 仅支持适合存储只读数据的 String 数据类型。Memcached 是一个易失的内存键值源。它是多线程的,主要用于缓存对象。 | Redis 是一个开源的内存数据结构存储,它也可以用作数据库和缓存。它支持几乎所有类型的数据结构,例如字符串、哈希、列表、集合、具有范围查询的排序集合、位图、超日志和通过半径查询的地理空间索引。Redis 也可用于用作发布/订阅的消息传递系统。 |
主数据库模型 | Memcached 遵循键值存储数据库模型。 | Redis 也遵循 Key-value 存储数据库模型。 |
开发者 | Memcached 由 Danga Interactive 开发。 | Redis 由 Salvatore Sanfilippo 开发。 |
初始发行 | Memcached 最初于 2003 年发布。 | Redis 最初于 2009 年发布。 |
当前的版本 | Memcached 当前版本为 1.5.1,于 2017 年 8 月发布。 | Redis 当前版本为 4.0.2,于 2017 年 9 月发布。 |
开源协议 | Memcached 是免费和开源的。 | Redis 也是免费和开源的。 |
是否支持云 | 不 | 不 |
实现语言 | Memcached 是用 C 语言实现的。 | Redis 也是用 C 语言实现的。 |
服务器操作系统 | FreeBSD Linux OS X Unix Windows | BSD Linux OS X 视窗 |
支持的编程语言 | .Net、C、C++、ColdFusion、Erlang、Java、Lisp、Lua、OCaml、Perl、PHP、Python、Ruby | C,C#,C++, Clojure, Crystal, D, Dart, Elixir, Erlang, Fancy, Go, Haskell, Haxe, Java, JavaScript (Node.js), Lisp, Lua, MatLab, Objective-C, OCaml info, Perl, PHP、Prolog、Pure Data、Python、R、Rebol、Ruby、Rust、Scala、Scheme、Smalltalk、Tcl |
服务器端脚本 | 无 | 无 |
触发器 | 无 | 无 |
分区方法 | 没有任何 | 分片 |
复制方法 | 没有任何 | 主从复制 |
MapReduce | 无 | 无 |
外键 | 无 | 无 |
锁概念 | 无 | 乐观锁定,命令块和脚本的原子执行 |
并发 | 是的 | 是的 |
耐用性 | 无 | 是的 |
用户概念 | 是的 | 简单的基于密码的访问控制 |
安装 | Memcached 的安装和运行有点复杂。 | 安装 Redis 要容易得多。不需要依赖项。 |
内存使用情况 | MemcacheD 比 Redis 内存效率更高,因为它消耗的元数据内存资源相对较少。 | Redis 的内存效率更高,只有在您使用 Redis 哈希之后。 |
持久性 | Memcached 不使用持久数据。使用 Memcached 时,数据可能会因重新启动而丢失,并且重建缓存是一个代价高昂的过程。 | Redis 可以处理持久数据。默认情况下,它至少每 2 秒将数据同步到磁盘,提供可选和可调整的数据持久性,旨在在计划关闭或意外故障后引导缓存。虽然我们倾向于将缓存中的数据视为易失和瞬态的,但将数据持久化到磁盘在缓存场景中可能非常有价值。 |
复制 | Memcached 不支持复制。 | Redis 支持主从复制。 |
存储类型 | MemcacheD 将变量存储在其内存中,并直接从服务器内存中检索任何信息,而不是再次访问数据库。 | Redis 就像一个驻留在内存中的数据库。它从其数据库中执行(读取和写入)键/值对以返回结果集。这就是为什么它被开发者用于实时指标和分析的原因。 |
执行速度和性能 | MemcacheD 非常适合处理高流量网站。它可以一次读取许多信息,并在极好的响应时间内给您回馈。 | Redis 既不能处理高流量读取,也不能处理大量写入。 |
数据结构 | MemcacheD 在其数据结构中仅使用字符串和整数。因此,您保存的所有内容都可以是字符串或整数。这很复杂,因为对于整数,您唯一可以做的数据操作就是添加或减去它们。如果您需要保存数组或对象,则必须先将它们序列化,然后再保存。要读回它们,您需要取消序列化。 | Redis 具有更强大的数据结构,它不仅可以处理字符串整数,还可以处理二进制安全字符串、二进制安全字符串列表、二进制安全字符串集和排序集。 |
密钥长度 | Memcached 的密钥长度最大为 250 字节。 | Redis 的密钥长度最大为 2GB。 |
热门文章
优秀文章