WordPress 与 Redis & Memcached

本文总结下 WordPress 与常用的内存缓存系统 Redis & Memcached。

Memcached

Memcached 是一种开源的,高性能分布式内存对象缓存系统,本质上它是通用的,但最初的目的是通过减轻数据库负载以加速动态web应用程序, 这也是它现今主要的用途。

Memcached 由 Brad Fitzpatrick为他的公司 Danga interactives 在 2003 年 5 月 22 日用 Perl 语言开发而成,当时它仅服务于作者的交友网站 LiveJournal 。此后, Memcached 被 Anatoly Vorobey (它当时被那个交友网站雇用了,现在他在 Google ) 用C语言重新编写后, 开源后, Memcached 逐步发展为现代 Web 应用程序重要的缓存组件, Memcached 现在由 Redis Labs (它创建和维护 Memcached )赞助。

出道比较早的 Memcached 简洁,高效,但其简单的数据类型系统让它在某些应用场合下不那么合适。

Memcached 也采用 BSD 许可证。

Redis

Redis ( REmote DIctionary Server )是一个开源的内存数据库系统,它支持数据持久化(也就是你可以把它存在内存中的数据 dump 到硬盘上,以备下次载入 Redis 时使用), 它支持多种抽象的数据结构(字符串、列表、映射、集合、有序集合、位图,空间索引等)。

Redis 它由来自意大利西西里岛卡塔尼亚的 Salvatore Sanfilippo (花名 antirez )在 2009 年创建,至今 antirez 仍是该项目的首席开发者和唯一维护者。Redis 功能和数据结构比 Memcached 更加丰富,这让它对数据的操作更加灵活, 但也使得它比 Memcached 更加复杂。

Redis 的性能与 Memcached 难分伯仲,某些情形下,甚至比 Memcached 更为高效。

Redis 也采用 BSD 许可证。

 

Couchbase

Couchbase是个NoSQL分布式的,支持SQL查询的键值数据库, 它在NoSQL和分布式这个范畴内最大的竞争者是 MongoDB,它兼容 Memcached,阿里云的OCS ( ApsaraDB for Memcache )也兼容 Memcached 协议,Couchbase产品包含了CouchDB的一个副本, CouchDB 是一个 Apache 基金会托管的开源项目。

Membase (使用SQLite作为嵌入式存储引擎,在 Couchbase 中,使用的是 Apache CouchDB )于2010年10月发布,是由Zynga、NorthScale与NHN联合开发的,NorthScale后来变成了Membase Inc(现在 membase.com 这个域名已经指向了 Couchbase.com)。

2011年,CouchOne与Membase合并了,成为了 Couchbase。

Couchbase 分三个版本:开源版,社区版和企业版, 开源版采用 Apache License 2.0 许可证, 社区版没有声明采用何种许可证,只是说可以用在生产系统中,付费版,你懂的。

BangDB

据他们自己说,读写性能优于 Redis,只是它还在成长进化中,并且关注者寥寥无几,不适合用作生产环境。

Redis 和 MemcacheD 的共同点

都把缓存层的数据放在内存中;

都存储键值数据;

都属于 NoSQL 家族;

Redis 和 MemcacheD 的差异

数据类型和数据管理

Redis 支持的数据类型比 MemcacheD 更丰富:

Redis-Data-Types

 

( 上图来自 RedisLabs.com )

缓存采用一种叫做数据驱逐的机制来从内存中删除旧的数据,以便为新数据腾出空间。MemcacheD 的数据驱逐机制使用了一个LRU( 最近使用的: Least Recently Used )算法,并在一定程度上任意地将大小与新数据类似的数据驱逐出去。相比之下,Redis则允许对驱逐政策进行细粒度的控制,尽管选择了六个不同的驱逐政策。Redis 还使用了更复杂的内存管理和驱逐候选方法。

 

流行度

Redis 最强大,最流行, Memcached 更小,功能更单调, Couchbase 之类打酱油的键值存储系统,就先按下不表吧,见谷歌趋势所示:

memcached-and-redis-trading

 

读写性能

几年以前, Memcached 的读写性能一般来说优于 Redis, 如今, 它俩基本上旗鼓相当了, 并且 Redis 的读写性能要稍微优于 Memcached:

 

redis-memcached-read-write

 

在实际测试中, 当 client 为 32 时, Redis 性能会显著下降。

也可使用这个脚本进行对比测试:

https://github.com/suifengtec/redis-memcached/blob/master/test.php

我的测试结果如下:

内存占用

由于 Redis 可处理复杂的数据结构,所以它在实际应用中,在内存占用上要优于 Memcached。

数据持久化

内存缓存系统的数据持久化可以理解为间隔指定时间或发生意外时,尝试将内存中缓存的数据 dump 到硬盘上,以备不时之需。

Memcached (至少现在还)不支持数据持久化, Redis 是可以支持数据持久化的。

规模较大的应用场景

在缓存的数据项均较小时, Memcached 优于 Redis, 如果缓存的数据项均较大时, Redis 优于 Memcached。

 

结论

能用 Redis 的话,就不要用 Memcached 了, 真要用 Memcached, PHP 扩展用 memcahced , 不要用 memcache 。

 

参考文档

https://trends.google.com/trends/explore?date=all&q=redis,memcached,couchbase

http://oldblog.antirez.com/post/redis-memcached-benchmark.html

http://dormando.livejournal.com/525147.html


error: 错误信息!