区别点 | 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 服务端组成一个虚拟的服务端,对于调用者来说完全屏蔽和透明。提高的单机器的内存利用率 。
参考
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