如果需要在redis中进行海量的数据存储,如果只有一台redis显然不能实现该功能.如果通过扩大内存的方式也不能达到要求.因为时间都浪费在寻址中. 如何有效的存储海量的数据呢???
说明:一般采用多台redis,分别保存用户的数据,从而实现内存数据的扩容. 对于用户而言:将redis分片当做一个整体,用户不在乎数据到底存储到哪里,只在乎能不能存. 分片主要的作用: 实现内存扩容.
说明:在redis根目录中创建一个shards目录
说明:由于Redis启动是根据配置文件运行的,所以如果需要准备3台redis,则需要复制3份配置文件redis.conf. 端口号依次为6379/6380/6381
复制配置文件: 修改端口号: 根据配置文件名称,动态修改对应的端口即可. 启动redis:
redis-server 6379.conf redis-server 6380.conf redis-server 6381.conf一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,目的是解决分布式缓存的问题。 [1] 在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。一致性哈希解决了简单哈希算法在分布式哈希表( Distributed Hash Table,DHT) 中存在的动态伸缩等问题 [2] 。
1.常见hash多少位16进制数? 8位16进制数 2.16进制数取值有哪些 0-9 A-F 共16个数 3. hash的取值范围从 00000000 ~ FFFFFFFF (24)8 4. 上述取值的个数共有多少个??? 要求以2为底 2^32 幂 5. 对相同的数据进行hash值一致
步骤: 1.首先计算node节点 2.将用户的key进行hash计算,之后按照顺时针的方向找到最近的node节点之后链接,执行set操作.
①平衡性是指hash的结果应该平均分配到各个节点,这样从算法上解决了负载均衡问题 [4] 。 说明: 如果发现节点中存储的数据负载不均,则采用虚拟节点的方式实现数据的平衡(相对平衡)
②单调性是指在新增或者删减节点时,不影响系统正常运行 [4] 因为可以实现自动的数据迁移.。 原则: 在进行数据迁移时 应该尽可能少的改变原有的数据.
③分散性是指数据应该分散地存放在分布式集群中的各个节点(节点自己可以有备份),不必每个节点都存储所有的数据 [4] 。 鸡蛋不要放在一个篮子里
Redis分片的主要的作用是实现内存数据的扩容,Redis分片如果宕机不能实现高可用!!! Redis的分片的计算发生在业务服务器中 将需要保存的数据存储到redis中. Redis分片的执行的效率是最高的.
说明:将AOP缓存中的注入项 改为分片对象
问题分析: 如果需要实现Redis服务器的高可用,前提条件应该实现主从的配置.
前提:先关闭Redis服务器. 1).复制shards文件 2).删除持久化文件 3).运行3台Redis服务器
[root@localhost sentinel]# redis-server 6379.conf & redis -server 6380.conf & redis-server 6381.conf &搭建规则:
6379 当作主机6380/6381 当作从机检查主从的状态: info replication 3). 实现主从的挂载 slaveof 主机IP 主机端口 4).关于主从挂载的特点 检查从机中的状态 检查主机的状态:
说明:由于误操作可能导致主从的结构挂载异常.如何重新挂载呢? 操作说明:可以将redis服务器全部关闭,之后重启 默认条件下的主从的挂载则会失效. 重新挂载即可. 补充说明:由于slaveof指令在内存中生效.如果内存资源释放,则主从的关系将失效.为了实现永久有效,应该将主从的关系写在配置文件中即可. 新问题的产生: 如果主机意外宕机,则由谁来完成配置文件的修改呢?
哨兵工作原理说明 1.当哨兵启动时,会监控当前的主机信息.同时获取链接当前主机的从机信息. 2.当哨兵利用心跳检测机制(PING-PONG),检验主机是否正常.如果连续3次发现主机没有响应信息.则开始进行选举. 3.当哨兵选举完成之后.其他的节点都会当做新主机的从.
1).修改保护模式 2).开启后台运行 3).修改哨兵的监控 其中的1表示投票生效的数量. 4).哨兵宕机之后的选举时间 如果主机宕机10秒之后开始进行推选. 5.修改哨兵选举的超时时间
1).启动哨兵
[root@localhost sentinel]# redis-sentinel sentinel.conf2).先关闭主机,之后等待10秒之后,检查从机是否当选主机.之后再次启动主机(宕机的),检查是否为新主机的从
如果有多个哨兵进行选举,如果连续3次投票失败,可能引发脑裂现象的发生. 问题: 脑裂现象发生的概率是多大?? 1/8 = 12.5% 解决策略: 只要增加选举的节点的数量,可以有效的降低脑裂现象的发生. 概率论
分片: 1.主要的作用实现内存数据的扩容. 2.由于运算发生在业务服务器中,所以执行的效率更高. 3.Redis的分片没有高可用的效果. 如果其中一个节点出现了问题则导致程序运行出错. 哨兵机制: 1.实现Redis高可用,当redis服务器发生宕机的现象时,哨兵可以灵活的监控.实现自动的选举实现 故障的迁移. 2.哨兵中所监控的redis节点中的数据都是相同的. 无法实现海量的数据存储. 3.哨兵虽然可以实现redis的高可用,但是由于哨兵的本身没有实现高可用.所以存在风险. 如果想要最大程度上减少损耗,则建议不要引入第三方的监控
Hash槽算法 分区算法. 说明: RedisCluster采用此分区,所有的键根据哈希函数**(CRC16[key]%16384)**映射到0-16383槽内,共16384个槽位,每个节点维护部分槽及槽所映射的键值数据.根据主节点的个数,均衡划分区间. 算法:哈希函数: Hash()=CRC16[key]%16384 当向redis集群中插入数据时,首先将key进行计算.之后将计算结果匹配到具体的某一个槽的区间内,之后再将数据set到管理该槽的节点中.
说明:Redis集群搭建步骤 参见资料的文档.
链接:https://pan.baidu.com/s/1v6q9FF6tzhYqdfMkPUeu5A 提取码:deuo前提条件: redis.conf的配置文件首先应该配置正确 码云中有redis配置. 搭建步骤:
关闭所有的Redis服务项 2.删除nodes.conf配置文件 由于搭建集群之后,所有的集群的信息都会写入nodes.conf文件中,如果下次重启会读取其中的配置信息实现redis集群的主从的搭建. 所以如果需要重新搭建集群,则必须删除该文件重新生成. 3.重启Redis服务器之后重新搭建集群 redis-cli --cluster create --cluster-replicas 1 192.168.126.129:7000 192.168.126.129:7001 192.168.126.129:7002 192.168.126.129:7003 192.168.126.129:7004 192.168.126.129:70051).检查redis主机的状态 2).将主机关闭 redis-cli -p 7000 shutdown
3).检查主机是否切换 4).重启7000服务器.检查是否为7003的从
原则: Redis的内存缺失则集群崩溃
问: Redis集群中最多存储16384个key 错 CRC16(KEY1)%16384 = 2000 CRC16(KEY2)%16384 = 2000 表示key1和key2都归节点1进行管理. 至于节点到底是否能够存储 由内存决定.
问: Redis集群中最多有多少个主机?? 16384台