浅谈Memcached和Redis的区别

来源:互联网 发布:淘宝授权书模板 编辑:程序博客网 时间:2024/05/16 11:37

简单区别:

1、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储,Memcached基本只支持简单的key-value存储。

2、Redis支持数据的备份,即master-slave模式的数据备份。

3、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,Memcached不支持持久化。

 

实现原理上的区别

1、在Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。Redis只会缓存所有key的信息,如果Redis发现内存的使用量超过某个阈值,将触发swap的操作,通过某种算法,将部分key对应的value存储到磁盘中,同时删除内存中的value,什么时候使用时,会再次从磁盘中调用到内存。

2、Memcached是多线程,非阻塞IO复用的网络模型,Redis使用单线程的IO复用模型。

3、内存管理方面不同:

Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除。

Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。

 

总结一下:如果使用缓存时,支持的数据类型比较多,而且又希望数据不能丢失,同时又想实现缓存的高可用,redis是个不错的选择。

原创粉丝点击