redis是一个键值对,NOSQL,高性能存储系统,性能高,是分布式缓存的最佳人选,特别是node环境下,因为node的内存限制,是的node在内存方面寸土寸金,使用redis作缓存,是高性能高并发,node服务器最佳组合。node
redis是使用内存进行存储的,因此就注定了他不适合很是大的持久性数据,这样的数据仍是交给mongodb,elasticSearch,mysql来存储。使用redis必定要注意内存的浪费,redis是单线程的必定要注意redis对cpu的使用率,若是太高就会形成卡顿。redis的过时键数据回收机制有两种,惰性回收和定时回收。mysql
redis哨兵是redis分布式的关键。下来看一下redis主从复制问题,在主从复制模式下主节点将数据同步到从节点,一旦主节点出问题从节点顶上去,这样以来一个关键的问题是主节点的读和写的能力就决定了整个系统的能力。若是这个过程有人工干预必然形成数据不完整和丢失,这就要求咱们构建高可用的redis集群。redis
一个高可用的redis主从复制模式,对于小型的公司这样足够了。它包括若干个哨兵节点和若干个数据节点,每一个哨兵节点会对数据节点和其他的哨兵节点进行监控,当发现节点不可用时,会对节点进行标识,若是被标识的节点是主节点,他就会和其余哨兵节点进行协商,当大多数哨兵节点都认为主节点不可用,他们会自动选出一个哨兵节点完成鼓掌转义工做,整个过程自动化,从而使系统高可用。sql
一个分布是数据库首先要解决的问题是,把这个数据集合按照分区映射到多个节点的问题,通常有三种选择:1,节点取余分区。2,哈希表分区。3,虚拟槽分区。redis采用的是虚拟槽分区。它是全部的键值根据哈希函数映射到0-16383的整数槽内,一个节点负责维护一部分槽位和数据,而且节点之间不断交换信息,一段时间后一个节点就知道整个集群的完整信息,可是这种信息交换是有成本的。理论上来说,能够向集群的任意一个节点发送数据请求,若是该节点没有,它会自动向有的节点转发。若是你是运维工程师,里面设计的问题不少很复杂,这里再也不赘述。mongodb