Part1 特点
一、Memcached
0、多线程
1、不支持持久化
2、只支持string类型
2、过期策略是惰性删除
二、Redis
0、单线程
1、支持持久化
2、类型丰厚,都是精心设计的高效数据结构
3、过期策略是惰性删除和定期删除。
4、支持集群
Part2 线程模型具体区别
一、Redis
0、单进程单线程模型
1、高并发原因
1.0 单进程避免上下文切换(进程切换、或线程切换),节省了资源。
1.1 完全基于内存,操作内存。
1.2 多路复用、非阻塞I/O模型。
多个网络连接复用同一个线程。
参照上图,简单来说,就是。我们的redis-client在操作的时候,会产生具有不同事件类型的socket。在服务端,有一段I/0多路复用程序,将其置入队列之中。然后,文件事件分派器,依次去队列中取,转发到不同的事件处理器中
需要说明的是,这个I/O多路复用机制,redis还提供了select、epoll、evport、kqueue等多路复用函数库,大家可以自行去了解
二、Memcached
0、单进程多线程模型
Part3 适合场景
一、使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached
二、由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。
Redis或MongoDB是不能取代MC的,原因
Part3 PHP操作MC和Redis的一点区别
MC的set方法可以直接写入array, redis不可以, 参考本站《存储PHP Array到Memcached和Redis中》
参考
为什么说Redis是单线程的以及Redis为什么这么快
分布式缓存Redis之与Memcached的比较
Redis与Memcached的区别
MongoDB 或者 redis 可以替代 memcached 吗?
Redis和Memcache的区别总结-京东阿里面试