前几天, Redis 的作者 Antirez 写了一篇博客, 驳斥了某个库作者认为 Redis 比不上 Memcached 的观点。
Antirez 的博文列举了几个他认为 Redis 比 Memcached 更优秀的地方, 但是并没有对 Redis 和 Memcached 的每个功能进行详细的对比, 而这篇文章要做的就是对 Antirez 的文章进行补充, 对 Redis 和 Memcached 进行详细的对比, 通过查看这些对比结果明白 Redis 和 Memcached 之间的区别。
Memcached是个纯内存型的缓存系统,支持数据类型单一,单个缓存数据有限制,支持分布式,是个很理想的缓存系统。
Redis是个简单的NOSQL数据库,支持几种简单的数据类型,支持主从复制,支持持久化,可以看作是个内存型数据库。
由此可见,Memcached是正宗的缓存系统,Redis是个可以做缓存系统的内存型数据库。
由于Redis的数据可以设置过期时间,支持多种数据类型,数据大小无限制,支持持久化等特点,貌似怎么看都稳压Memcached一筹,替代它好像是大势所趋。
事实并非如此。
网站需要缓存的数据可以分为两种,一种是可丢失性的缓存,这种缓存不在乎被丢失,丢失了就再从数据库或其它地方再读回来,如Session,从数据库查询的数据,应用代码的缓存等;另一种是不可丢失性的缓存,就是其它地方没保存有,只有Redis缓存有的数据。
先说下Memcached和Redis的优缺点:
Memcached是纯内存型的缓存,占用内存小,运行稳定,读写数据很快。Redis的数据可以持久化到硬盘,占用内存大,占用硬盘IO高,在写频繁的时候而硬盘性能又不高的时候(目前只有SSD固态硬盘的性能才高,机械硬盘性能都不高),大大占用CPU资源,读写性能会急剧降低,甚至会崩溃,不稳定。
为什么说Memcached可以缓存Session数据?有的人说,Memcached崩溃会造成Session丢失,我觉得这个可能性真的不大。Session是每个页面都需要读,每个新用户都需要写的,而且大部分的Session数据都是可丢失性的数据(一般网站陌生人Session比登录用户Session要多的多),数据量也很小,非常适合保存在Memcached。
Memcached其实是非常稳定的,目前我们网站每天百万PV,没出现过Memcached崩溃的问题。只要服务器不崩溃,不是人为关闭,Memcached几乎没有崩溃的可能。如果服务器经常崩溃的话,我觉得应该考虑换个好点的服务器而不是把Memcached换成Redis。
当然了,Redis也有其适用的场合,使用Redis保存那些不可丢失性数据。
功能对比
对比项目 | Memcached | Redis |
---|---|---|
支持的数据结构 |
|
|
单机附加功能 |
|
|
多机附加功能 |
|
|
内存分配方式 | slab | jemalloc |
网络模型 | 使用多个线程处理多个客户端,使用锁对线程进行同步 | 单线程,通过 I/O 多路复用来处理多个客户端 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9399028/viewspace-1813731/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9399028/viewspace-1813731/