redis缓存集群简单介绍

2018-12-19 09:32:36 976 思小齐 思小齐

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

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

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

【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存储的不足,在部分场合可以对关系数据库起到很好的补充作用。

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层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。