Memcached与Redis作为近些年来用得最多的缓存服务器,若想用好,有必要将它们进行对比分析。
共同点
想了解一个软件,得先知道它是干什么用的。那么memcached和redis有什么用途呢?我们都知道,数据一般存放在数据库中,但是再高并发的情况下,数据库查询就会变得很慢,需要耗费大量的时间,这对于用户是不可忍的。那应该怎么办呢?一个常规的做法就是将热点数据加载之内存中,提高查询效率。memcached和redis都可以用来干这事。使用key-value的方式进行查找,效率明显更高。所以它们一般都被做缓存服务器,缓存热点数据,减少数据库查询。
数据库实现
先来看看他们的最核心内容,各自数据库的实现。memcached只支持key-value结构,通过维护了一个hash表来查找特定的item。即只能一个key对于一个value,它的数据在内存中也是这样以key-value形式存在;redis数据库的数据结构多一些,不像memcached只支持保存字符串,redis支持string,set,list,sorted set和hash table5种数据结构。
事件模型
两者都使用epoll来做事件循环,不过redis是单线程的服务器,而memcached是多线程的,使用master-worker的工作方式,主线程监听端口和建立连接,管理各个工作线程,是不是很熟悉?(想想Nginx的工作方式)。
内存分配
首先来看他们的内存分配方式。memcached会预先分配好内存,使用时再从内存池中分配,这样可以减少内存分配的次数,提升效率。redis没有内存池概念,随取随用,无需管理内存,十分方便。
今天的介绍到此结束了,我们明天再见!
閱讀更多 架構之美 的文章