代做道具网站,进一步加强区门户网站建设管理,专业论坛网站开发开发,金融互助平台网站制作前面的主从集群可以应对Redis高并发读的问题#xff0c;Redis主从之间可以做同步#xff0c;为了提高主从同步时的性能#xff0c;单节点Redis的内存不要设置太高#xff0c;如果内存占用过多#xff0c;做RDB的持久化#xff0c;或者做全量同步的时候#xff0c;导致大…
前面的主从集群可以应对Redis高并发读的问题Redis主从之间可以做同步为了提高主从同步时的性能单节点Redis的内存不要设置太高如果内存占用过多做RDB的持久化或者做全量同步的时候导致大量的IO性能会有一定的下降 如果单节点Redis的内存降低了比如说只能存10g20g那么有海量的数据要存储的时候改怎么办这个问题解决不了虽然应对高并发读的问题如果我写的问题高并发也挺高该怎么办这就需要Redis的分片集群来解决
1搭建分片集群
需要有多个master每个master都可以写并发写的问题就可以保障了每个master存储10g好几个master加起来内存就扩大了数据存储的上限取决于master的数量理论上就能应对海量数据存储的问题
每个master可以有多个slave节点每个master可以形成主从关系就能实现高并发读具备的主从集群的特性了
master之间有心跳原来主从需要做哨兵现在不需要做哨兵了master之间互相起到哨兵的效果通过心跳互相监控多个master对一个master主观下线也会把它做到可观下线也可以做主从的切换类似哨兵的功能Redis客户端可以访问集群中的任意节点这些节点之间可以自动做路由把你的请求路由到正确的节点上去访问所以就不在需要哨兵机制了同时具备的哨兵机制的所有功能这就是分片集群的结构 准备多个配置文件 查看启动状态 输入yes回车 2散列插槽
slots叫做散列插槽 数据为什么跟插槽绑定而不是跟节点绑定如果数据跟节点绑定因为Redsi的主节点可能出现宕机的情况的或者是集群扩容增加了节点或者是删除了节点如果节点删除了或者宕机了数据就跟着丢了如果跟插槽绑定当节点宕机时我们可以这个节点对应的插槽转移到活着的节点
集群扩容时我们也可以将插槽进行转移数据跟着插槽走永远就能找到数据的位置
集群模式下启动客户端需要加-c的参数 存储num的话算出的slot值是2765正好在7001分配的插槽内正好存到这里
当存储a算出的是slot值在7003分配的插槽内它会重定向到7003进行存储并且只能在7003获取到这个值在7003是获取不到num的值的它需要重定向到7001获取 所以我们说啊你访问集群中的任意一个节点都没有问题它都可以显示这种重定向 {}为有效部分为了让数据存储到一个插槽可以把{}设为一样后面的不一样这样的key就可以存储到同一个Redis实例 3集群伸缩
作为分片集群有一个非常重要的功能就是集群伸缩就是集群可以动态的增加节点或者是移出节点 添加集群节点帮助文档 num存储在的插槽在7001所以需要把7001的插槽分配到7004上 修改配置文件 添加新节点7004到集群 后面的ip是集群中存在的一个ip端口 查询集群状态但是7004是没有插槽的 需要把num 2765的插槽分配到7004 插槽的分配把7001上的插槽分配到7004 移动2765的曹操移动过去或者直接移动3000 那个曹的id7001的 id然后done 输入yes 查看发现7004有了插槽 此时就可以在7004进行存储获取num 4故障转移
分片集群虽然没有哨兵但是也具备故障转移的功能
自动故常转移 上面我们已经删除了7004节点
我们让7002master宕机 发现8003变成主了 重新启动7002就变成slave了就实现了主从的切换 我们并不需要哨兵Redis分片集群具备主从的故障切换 手动故障转移
这是自动的故障转移有时候我们需要手动的进行主从切换比如说这个机器比较老旧了需要维护了这个时候我们可以启动一个新的节点让他称为7001的slave然后手动的让它替换7001实现手动故障转移 5RedisTemplate访问分片集群
我们最终还是使用java代码访问分片集群的配置根集群的配置一样这里只要改变分片集群的ip配置 查询 set他应该去找7001存取 换一个值 它存取找的是7003节点对应的插槽 所以集群的自动切换插槽路由啊读写分离都实现了。