redis分片机制
redis在整个处理流程中通常是用作数据库或者缓存的,当redis宕机的后,会影响整个流程的执行,因此我们将redis分片,所谓分片其实就是多部署几台redis,将数据尽可能的保存到不同的redis中,当一台redis宕机后只会影响一部分数据,redis分片的优点是可以实现内存的动态扩容,从而解决海量数据存储的问题,但是redis不能够实现高可用。
那么当有多个redis的时候,传进来的数据如何决定存储在哪个redis中呢?在redis底层有一套算法叫做Hash一致性算法:
- 一般的hash由8位16进制数组成的. 共有2^32种可能性!!!
- hash算法对相同的数据进行hash运算时 结果必然相同.
00000000-FFFFFFFF 0-F=(24)8 = 2^32
进制:
1).二进制 取值 : 0-1 规则满2进1
2).八进制 取值 : 0-7 规则满8进1 2^3=8 每三位二进制数就是一个8进制数
3).十六进制 取值 : 0-9 A-F 规则满16进一 2^4=16 每四位二进制数就是一个16进制数
1.均衡性:
尽可能的让信息数据均匀的落入不同的节点中,如果根据hash计算,获取的数据量不是均匀分片的则采用虚拟节点重新进行划分,直到数据达到均衡性的要求,虚拟节点的个数不唯一。
2.单调性
如果节点发生了变化,那么数据可以实现动态的数据迁移,如果节点是新增操作,则数据可以动态的迁移,但是如果节点发生了减少,那么数据也会减少。
规则:如果新增节点后,尽可能的保证原有节点不发生变化,避免全部的key重新进行哈希运算导致负载过高。
3.分散性
分散性是指数据应该分散地存放在分布式集群中的各个节点(节点自己可以有备份),不必每个节点都存储所有的数据
<鸡蛋不要放到一个篮子里>
redis分片机制存在的问题
说明:Redis分片机制可以实现内存数据的扩容.但是如果Redis服务器发生了宕机的现象,则会影响整个分片使用.
问题:Redis分片机制没有实现高可用. 当主机宕机之后.由从机自动的实现故障迁移.用户访问不受任何影响.
Redis哨兵机制
哨兵:哨兵模式是通过配置哨兵来管理redis集群,已解决redis分片后不能实现高可用缺点。
1.首先启动Redis哨兵.由哨兵监控整个Redis主从状态. 主要监控M主机. 同时获取其从机的信息.
2.哨兵利用心跳检测机制(PING-PONG)的方式监控主机是否宕机. 如果连续3次主机没有响应.则哨兵判断主机宕机.
之后开始进行选举.
3.根据从主机中获取的从机信息.之后利用 选举机制算法.挑选新的主机.
4.之后将剩余的redis修改为当前主机的的从.并且修改配置文件.
Redis分片/Redis哨兵总结
1).分片可以实现Redis内存数据的扩容.可以存储海量的内存数据. Redis分片机制没有实现高可用.如果分片中一个节点宕机,则直接影响整个服务的运行.
2).哨兵可以实现Redis节点的高可用.但是Redis中的数据不能实现内存的扩容.
哨兵服务本身没有实现高可用.如果哨兵发生了异常则直接影响用户使用.
想法: 能否有一种机制既可用满足海量数据的存储要求(扩容),同时可以实现redis高可用,并且还不会依赖第三方.
Redis集群
Redis分区