Redis(七)

Redis集群

author:QYX

问题:

容量不够?redis如何进行扩容?

并发写操作,redis如何分摊?

什么是集群?

Redis集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这个N个节点中,每个节点存储总数据的1/N

Redis集群通过分区(partition)来提供一定程度的可用性(availbility):即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求

Redis(七)

 Redis(七)

 Redis(七)

 Redis(七)

Redis(七)

 Redis(七)

注意不要使用127.0.0.1,要使用真实的IP地址

我们可以发现集群启动了

Redis(七)

然后以集群的方式进入客户端

redis-cli -c(cluster) -p 端口号

测试一下

Redis(七)

可以使用cluster nodes命令查看集群信息

Redis(七)

 我们可以使用{}来指定相关组,相同组之间的数据必定在同一个插槽中

Redis(七)

Redis(七)

 何为slot?

Redis(七)

 Redis(七)

 Redis(七)

回答:

1 从节点会变为主节点

2 主节点会变成从节点

3 不能继续

Redis集群提供了以下好处:

1 实现扩容

2 分摊压力

3 无中心配置相对简单

Redis集群的不足

1 多键操作是不被支持的

2 多键的Redis事务是不被支持的,lua脚本也不被支持

3 由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过度,复杂度过度

Redis集群的java操作

 Redis(七)

public void testRedis()
{
    Set<HostAndPort> sets=new HashSet<>();
    sets.add(new HostAndPort("198.162.99.1",6379));
    JedisCluster jedisCluster=new JedisCluster(sets);
    jedisCluster.set("admin","123456");
    String admin = jedisCluster.get("admin");
    System.out.println(admin);
    jedisCluster.close();
}

相关推荐