分布式缓存:

  缓存这种能够提升指令和数据读取速度的特性,随着本地计算机系统向分布式系统的扩展,在分布式计算领域中得到了广泛的应用,称为分布式缓存。分布式缓存能够高性能地读取数据、能够动态地扩展缓存节点、能够自动发现和切换故障节点、能够自动均衡数据分区,而且能够为使用者提供图形化的管理界面,部署和维护都十分方便。

  既然是缓存,那么本质还是存储一些数据,与本地缓存一样,当请求进来时,先去缓存中查找,缓存中存在直接返回缓存中的数据,否则进入数据库查找。所谓分布式缓存,即在分布式环境下的缓存,所有节点都能共享缓存,简单的说就是把本地缓存的缓存内存移到一个共享的地方,就像数据库一样,不管哪个客户端都能访问到。

  先来了解下分布式缓存,常用的分布式缓存有Redis、MongoDB、Memcached、HBase。。。它们都是NoSq(Not Only SQL)数据库,NoSql是指非关系型数据库,我们常用的SQLserver、MySQL。。。都是关系型数据库,这些数据库用来存储重要信息,对于日常使用没问题,当面对大规模高并发的时候就有些无力,这个时候NoSq可以更好的应对。

  Redis与Memcached对比:

对比项

Redis

Memcached

高可用

支持主从节点复制配置,从节点可使用RDB和缓存的AOF命令进行同步和恢复;支持Sentinel和Cluster(从3.0版本开始)等高可用集群方案

memcached服务器互不通信,分布式部署取决于memcached客户端,需要二次开发

队列 

 支持lpush/brpop、publish/subscribe/psubscribe等队列和订阅模式

 不支持队列,可通过第三方MemcachQ来实现

适用场景 

复杂的数据结构,有持久化、高可用需求 

只需key-value数据结构,数量量非常大,并发量非常大的业务 

过期策略 

主动过期 +惰性过期

懒淘汰机制,每次往缓存放入数据的时候,都会存一个时间,在读取的时候要和设置的时间做 TTL 比较来判断是否过期。

虚拟内存使用 

有自己的VM机制,理论上能够存储比物理内存更多的数据,当数据超量时,为引发swap,把冷数据刷到磁盘上 

所有的数据储存在物理内存里 

网络模型 

非阻塞I/O模型 ,提供一些非KV存储之外的排序,集合功能,在执行这些功能时,复杂的CPU计算会阻塞整个I/O调度

非阻塞I/O模型 ,但是使用了多线程,不会出现一个逻辑复杂的请求阻塞对其它请求的响应的场景

数据结构

key-value,哈希,列表,集合,有序集合

纯key-value

持久化

有,RDB和AOF


存储value容量 

最大512M 

最大1M 

多线程 

支持单线程 

支持多线程,CPU利用方面优于Redis 

单机QPS 

约10W 

约60W