Redis和Memcached的选择

看到不少人推荐使用Redis代替Memcached,我以为这两个是不同的东西,它们的关系应该是共存而不是替代。 数据库

Memcached是个纯内存型的缓存系统,支持数据类型单一,单个缓存数据有限制,支持分布式,我以为这是个很理想的缓存系统。 缓存

Redis是个简单的NOSQL数据库,支持几种简单的数据类型,支持主从复制,支持持久化,能够看做是个内存型数据库。 服务器

因而可知,Memcached是正宗的缓存系统,Redis是个能够作缓存系统的内存型数据库。 分布式

因为Redis的数据能够设置过时时间,支持多种数据类型,数据大小无限制,支持持久化等特色,貌似怎么看都稳压Memcached一筹,替代它好像是大势所趋。 性能

事实并不是如此。 网站

网站须要缓存的数据能够分为两种,一种是可丢失性的缓存,这种缓存不在意被丢失,丢失了就再从数据库或其它地方再读回来,如Session,从数据库查询的数据,应用代码的缓存等;另外一种是不可丢失性的缓存,就是其它地方没保存有,只有Redis缓存有的数据。 内存

先说下Memcached和Redis的优缺点: 资源

Memcached是纯内存型的缓存,占用内存小,运行稳定,读写数据很快。Redis的数据能够持久化到硬盘,占用内存大,占用硬盘IO高,在写频繁的时候而硬盘性能又不高的时候(目前只有SSD固态硬盘的性能才高,机械硬盘性能都不高),大大占用CPU资源,读写性能会急剧下降,甚至会崩溃,不稳定。 get

为何说Memcached能够缓存Session数据?有的人说,Memcached崩溃会形成Session丢失,我以为这个可能性真的不大。Session是每一个页面都须要读,每一个新用户都须要写的,并且大部分的Session数据都是可丢失性的数据(通常网站陌生人Session比登陆用户Session要多的多),数据量也很小,很是适合保存在Memcached。 io

Memcached实际上是很是稳定的,目前咱们网站天天百万PV,没出现过Memcached崩溃的问题。只要服务器不崩溃,不是人为关闭,Memcached几乎没有崩溃的可能。若是服务器常常崩溃的话,我以为应该考虑换个好点的服务器而不是把Memcached换成Redis。

固然了,Redis也有其适用的场合,我会在下一篇博文中,详细介绍个人网站使用Redis保存哪些不可丢失性数据。

相关文章
相关标签/搜索