Redis分片集群RedisCluster

redis相信大家都是非常的熟悉了,在这里就不一一的给大家介绍一些基础的操作了,今天我们主要谈的是Redis集群方案。可能有的同学会说,RedisSentinel集群不是挺好的嘛,可以自动选举,解决了主从复制手动改配置的难题。其实,细细一想,Sentnel还是存在几个小问题的。第一,数据冗余,虽然说你是多台服务器,但是每个服务器的数据全是一模一样的,没必要,浪费资源。第二,中心化,就是说RedisSentinel集群是只能存在一个主节点,一旦这个主节点宕机了,那么Redis选举过程中是不能操作Redis的。为了解决这两个难题,Redis官方推出了一种新的集群架构,就是我们今天要学习的RedisCluster。

RedisCluster原理

微服务中包含redis吗 微服务 redis_java

1.redisCluster提出卡槽的概念,总共为16384个,根据主节点的数量进行均摊存放。
2.客户端执行set或者是查询命令的时候,redis服务器会根据key进行crc16算法并对16384取余,根据取余的结果投递到指定的master进行存放。
3.每个master对应1个slave的目的是为了做高可用,以防master宕机。

RedisCluster环境搭建

1.在这里。我们模拟上面的图片,搭建6台服务器,通过修改端口号实现一台机器的伪集群。

微服务中包含redis吗 微服务 redis_分布式_02

每个配置文件内容

daemonize yes #后台启动
protected-mode no ; ## 允许外部访问
port 7000 #修改端口号,从7000到7005
cluster-enabled yes #开启cluster,去掉注释
cluster-config-file 7000nodes.conf #自动生成
cluster-node-timeout 15000 #节点通信时间

2.直接启动redis服务器

微服务中包含redis吗 微服务 redis_java_03


3.分配卡槽,表示主从为1:1,输入yes

微服务中包含redis吗 微服务 redis_分布式_04


4.set值,发现重定向到了其他服务器,表示redisCluster配置成功

微服务中包含redis吗 微服务 redis_分布式_05

JAVA操作RedisCluster

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.0.1</version>
</dependency>

微服务中包含redis吗 微服务 redis_服务器_06


注意:这里也可以写一个地址,我只是为了让大家看的清晰才全部写上,事实上你连接一个节点,那个节点会自动的帮你转发到指定的节点。

RedisCluster总结

通过上面的学习,相信大家对redisCluster有了比较深刻的认识。这种集群架构确实相当的不错,不仅节省了服务器资源,做到了真正的分摊存放数据,动态的扩容和缩容也是非常的方便。比如现在我要新增一个节点,可以使用redis官方提供的addNode命令,这样16384个卡槽就会重新进行进行分配,而且卡槽的数据不会丢失。总的来说,redisCluster将会是以后使用redis的必要集群方案。