redis与memcache对比


区别点 memcache redis
内存数据库

数据存放在内存


memcache还可用于缓存其他东西,例如图片、视频等等

数据存放在内存
数据类型 仅仅支持简单的k/v类型的数据,需要客户端自己处理复杂对象

Redis不仅仅支持简单的k/v类型的数据,

同时还提供list,set,hash等数据结构的存储

虚拟内存
不支持 Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘
具体用法:
(1)过期策略



(2)字节长度

memcache在set时就指定,

例如set key1 0 0 8,即永不过期


-Memcache在添加数据时就要指定数据的字节长度

Redis可以通过例如expire 设定,例如expire name 10




而redis不需要,如:redis 127.0.0.1:6379>set key2 "lxsymblog"
分布式
一主多从
memcache可以使用一致性hash做分布式
一主多从
redis支持master-slave复制模式
数据安全性-持久化
memcache不支持数据持久存储
memcache挂掉后,数据没了
redis可以定期保存到磁盘(持久化)
将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
灾难恢复
memcache挂掉后,数据不可恢复
redis数据丢失后可以通过aof恢复
数据备份
Redis支持数据的备份,即master-slave模式的数据备份
单/多核 Memcached可以使用多核

memcache需要使用cas保证数据一致性。CAS(Check and Set)是一个确保并发一致性的机制,属于“乐观锁”范畴;原理很简单:拿版本号,操作,对比版本号,如果一致就操作,不一致就放弃任何操作
Redis只使用单核

redis使用的是单线程模型,保证了数据按顺序提交。

在比较上,平均每一个核上 Redis在存储小数据时Memcached性能更高。
而在100k以上的数据中,Memcached性能要高于Redis,
虽然Redis最近也在存储 大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。
内存使用效率
使用简单的key-value存储的话,Memcached的内存利用率更高,
而如果Redis采用hash结构来做key-value存储,
由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。

cpu利用
redis单线程模型只能使用一个cpu,可以开启多个redis进程

注:

redis 优点: 丰富的数据类型和高速读写

redis缺点:

(1)持久化。redis将数据存储到内存有2种持久化方式:定时快照(snapshot)和基于语句的追加(appendOnlyFile,aof).snapshot的方法是指每隔一段时间将整个数据库的数据写到磁盘上,由于每次均写全部数据,

代价非常高;而aof方法只追踪变化的数据,但追加log可能过大,同时所有操作均要重新执行一遍,恢复速度慢。

(2)耗内存。尽管redis对一些数据结构采用了压缩算法存储,但占用内存量还是过高。

memcache优点:

(1)内存存储,速度快,对于内存的要求高,所缓存的内容非持久化。对于 CPU 要求很低,

所以常常采用将 Memcached 服务端和一些 CPU 高消耗 Memory 低消耗应用部属在一起 。

(2)分布式扩展: Memcached 的很突出一个优点,就是采用了可分布式扩展的模式。

可以将部属在一台机器上的多个 Memcached 服务端或者部署在多个机器上的 Memcached 服务端组成一个虚拟的服务端,对于调用者来说完全屏蔽和透明。提高的单机器的内存利用率 。

2. 如何选择

(1) 如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
(2)如果你需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里, 你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的 GET/SET一样高效。
(3)在100k以上的数据中,Memcached性能要高于Redis。

参考

http://blog.163.com/sun_jian_zhang/blog/static/187804041201310795917333/

http://www.nginx.cn/2353.html

http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520133994850357/

http://yale.iteye.com/blog/906124

你可能感兴趣的:(redis与memcache对比)