redis缓存集群简单介绍

这里是修真院后端小课堂,每篇分享文从html

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】java

八个方面深度解析后端知识/技能,本篇分享的是:程序员

【redis缓存集群简单介绍】redis

【修真院java小课堂】redis缓存集群简单介绍数据库

 

你们好,我是IT修真院郑州分院第11期的JAVA学员,一枚正直纯洁善良的java程序员。后端

今天给你们分享一下,redis缓存集群简单介绍。缓存

 

1.背景介绍服务器

redis是一个key-value存储系统。和Memcached相似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合能够对关系数据库起到很好的补充做用。memcached

Redis 集群是一个能够在多个 Redis 节点之间进行数据共享的设施。把多个redis实例整合在一块儿,造成一个集群,也就是将数据分散到集群的多台机器上。当数据量过大一个主机放不下的时候,就须要对数据进行分区,将key按照必定的规则进行计算,并将key对应的value分配到指定的Redis实例上,这样的模式简称Redis集群。
 性能

 

2.知识剖析

redis三种缓存策略-主从复制

在主从复制中,数据库分为俩类,主数据库(master)和从数据库(slave)。主数据库能够进行读写操做,当读写操做致使数据变化时会自动将数据同步给从数据库。从数据库通常都是只读的,而且结束主数据库同步过来的数据。一个master能够拥有多个slave,可是一个slave只能对应一个master。

当slave启动后,主动向master发送SYNC命令。master接收到SYNC命令后在后台保存快照(RDB持久化)和缓存保存快照这段时间的命令,而后将保存的快照文件和缓存的命令发送给slave。slave接收到快照文件和命令后加载快照文件和缓存的执行命令。复制初始化后,master每次接收到的写命令都会同步发送给slave,保证主从数据一致性。
  

redis三种缓存策略-哨兵

哨兵的做用是监控 redis系统的运行情况,功能有:监控主从数据库是否正常运行 、master出现故障时,自动将slave转化为master、多哨兵配置的时候,哨兵之间也会自动监控以及多个哨兵能够监控同一个redis

由一个或多个Sentinel 实例 组成的Sentinel 系统能够监视任意多个主服务器,以及这些主服务器属下的全部从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。
 

redis三种缓存策略-集群

Redis 集群的分片特征在于将键空间分拆了16384个槽位,每个节点负责其中一些槽位。Redis提供必定程度的可用性,能够在某个节点宕机或者不可达的状况下继续处理命令。Redis 集群中不存在中心(central)节点或者代理(proxy)节点

总结下来,就是redis支持的cluster特性有:节点自动发现,在线分片,集群容错,基于配置的集群管理

 

3.常见问题

1)redis集群的具体搭建
 

4.编码实战

5.扩展思考

redis集群分片机制。

Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念。一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每一个键都属于这 16384 个哈希槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪一个槽, 其中CRC16(key) 语句用于计算键 key 的 CRC16 校验和。每一个key经过CRC16校验后对16384取模来决定放置哪一个槽.集群的每一个节点负责一部分hash槽。这种结构很容易添加或者删除节点,而且不管是添加删除或者修改某一个节点,都不会形成集群不可用的状态。

 

何时整个集群不可用

1)若是集群任意master挂掉,且当前master没有slave.集群进入fail状态,也能够理解成集群的slot映射[0-16383]不完整时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败。
2)若是集群超过半数以上master挂掉,不管是否有slave,集群进入fail状态.

 

6.参考文献

https://blog.csdn.net/q649381...

https://blog.csdn.net/yinbuch...

http://www.cnblogs.com/gossip...

 

7.更多讨论

1)redis和mongoDB的区别

Redis主要把数据存储在内存中,其“缓存”的性质远大于其“数据存储“的性质,其中数据的增删改查也只是像变量操做同样简单.适合较小数据量的性能和运算。

MongoDB倒是一个“存储数据”的系统,增删改查能够添加不少条件,就像SQL数据库同样灵活,海量数据的访问效率提高。

 

2)redis支持事务么?

支持事务,命令要不所有执行,要不不执行,可是,仅能能保证事务中的操做按顺序执行。

 

3)redis集群有核心节点吗?

Redis-Cluster采用无中心结构,每一个节点保存数据和整个集群状态,每一个节点都和其余全部节点链接。全部的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。客户端与redis节点直连,不须要中间proxy层.客户端不须要链接集群全部节点,链接集群中任何一个可用节点便可。

相关文章
相关标签/搜索