比较索引 | Memcached | Redis |
---|
是什么 | Memcached 是一个内存中的键值存储,最初用于缓存目的。 | Redis 是内存数据结构存储,用作数据库、缓存和消息代理。 |
描述 | MemcacheD 简单、设计简单但功能强大。 其简单的设计促进了快速部署、易于夸大,并解决了许多与大型数据缓存相关的问题。 它具有内置的 API,该 API 提供了跨多个机器的大型哈希表,并使用内部内存管理来提供更高的效率。 MemcacheD 仅支持 String 数据类型,非常适合存储只读数据。 Memcached 是一个易失性内存中的键值来源。 它是多线程的,主要用于缓存对象。 | Redis 是一个开源的内存数据结构存储,也可以用作数据库和缓存。 它几乎支持所有类型的数据结构,例如字符串、哈希、列表、集合、带有范围查询的排序集合、位图、超日志和通过半径查询的地理空间索引。 Redis 也可以用于消息传递系统,用作发布/订阅。 |
主要数据库模型 | Memcached 遵循键值存储数据库模型。 | Redis 也遵循键值存储数据库模型。 |
开发者 | 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 Windows |
支持的编程语言 | .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 信息、Perl、PHP、Prolog、纯数据、Python、R、Rebol、Ruby、Rust、Scala、Scheme、Smalltalk、Tcl |
服务器端脚本 | 不能 | Lua |
触发器 | 不能 | 不能 |
分区方法 | 无 | 分片 |
复制方法 | 无 | 主从复制 |
MapReduce | 不能 | 不能 |
外键 | 不能 | 不能 |
事务概念 | 不能 | 乐观锁,命令块和脚本的原子执行 |
并发性 | 是的 | 是的 |
耐用性 | 不能 | 是的 |
用户概念 | 是的 | 基于简单密码的访问控制 |
安装 | Memcached 的安装和运行有点复杂。 | 安装 Redis 容易得多。 无需依赖项。 |
内存使用 | MemcacheD 比 Redis 更节省内存,因为它消耗的元数据内存资源相对较少。 | Redis 更节省内存,仅在您使用 Redis 哈希之后。 |
持久化 | Memcached 不使用持久数据。 使用 Memcached 时,数据可能会因重启而丢失,重建缓存是一个代价高昂的过程。 | Redis 可以处理持久数据。 默认情况下,它每 2 秒至少将数据同步到磁盘一次,提供可选的且可调的数据持久性,旨在在计划关闭或意外故障后启动缓存。 虽然我们倾向于将缓存中的数据视为易失性和瞬态数据,但在缓存场景中,将数据持久化到磁盘可能非常有用。 |
复制 | Memcached 不支持复制。 | Redis 支持主从复制。 |
存储类型 | MemcacheD 将变量存储在其内存中,并直接从服务器内存中检索任何信息,而不是再次访问数据库。 | Redis 就像一个驻留在内存中的数据库。 它从其数据库中执行(读取和写入)键/值对以返回结果集。 这就是开发人员将其用于实时指标和分析的原因。 |
执行速度和性能 | MemcacheD 非常适合处理高流量网站。 它一次可以读取很多信息,并以很短的响应时间返回给您。 | Redis 既不能处理读取时的高流量,也不能处理繁重的写入。 |
数据结构 | MemcacheD 在其数据结构中仅使用字符串和整数。 因此,您保存的所有内容要么是字符串,要么是整数。 它很复杂,因为对于整数,您唯一可以进行的数据操作是添加或减去它们。 如果您需要保存数组或对象,则必须先对它们进行序列化,然后才能保存它们。 要读回它们,您将需要反序列化。 | Redis 具有更强大的数据结构,不仅可以处理字符串整数,还可以处理二进制安全字符串、二进制安全字符串列表、二进制安全字符串集合和排序集合。 |
键长度 | Memcached 的键长度最长为 250 字节。 | Redis 的键长度最长为 2GB。 |