从程序员到架构师:大数据量、缓存、高并发、微服务、多团队协同等核心场景实战
上QQ阅读APP看书,第一时间看更新

4.2 缓存中间件技术选型(Memcached,MongoDB,Redis)

先将目前比较流行的缓存中间件Memcached、MongoDB、Redis进行简单对比,见表4-1。

表4-1 缓存中间件对比

使用MongoDB的公司最少,因为它只是一个数据库,由于它的读写速度与其他数据库相比更快,人们才把它当作类似缓存的存储。

所以接下来就是比较Redis和Memcached,并从中做出选择。

目前,Redis比Memcached更流行,这里总结一下原因,共3点。

(1)数据结构

举个例子,在使用Memcached保存List缓存对象的过程中,如果往List中增加一条数据,则首先需要读取整个List,再反序列化塞入数据,接着再序列化存储回Memcached。而对于Redis而言,这仅仅是一个Redis请求,它会直接帮助塞入数据并存储,简单快捷。

(2)持久化

对于Memcached来说,一旦系统宕机数据就会丢失。因为Memcached的设计初衷就是一个纯内存缓存。

通过Memcached的官方文档得知,1.5.18版本以后的Memcached支持Restartable Cache(可重启缓存),其实现原理是重启时CLI先发信号给守护进程,然后守护进程将内存持久化至一个文件中,系统重启时再从那个文件中恢复数据。不过,这个设计仅在正常重启情况下使用,意外情况还是不处理。

而Redis是有持久化功能的。

(3)集群

这点尤为重要。Memcached的集群设计非常简单,客户端根据Hash值直接判断存取的Memcached节点。而Redis的集群因在高可用、主从、冗余、Failover等方面都有所考虑,所以集群设计相对复杂些,属于较常规的分布式高可用架构。

因此,经过一番慎重的思考,项目组最终决定使用Redis作为缓存的中间件。

技术选型完成后,开始考虑缓存的一些具体问题,先从缓存何时存储数据入手。