Redis(八)
Redis集群
author:QYX
问题:
容量不够?redis如何进行扩容?
并发写操作,redis如何分摊?
什么是集群?
Redis集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这个N个节点中,每个节点存储总数据的1/N
Redis集群通过分区(partition)来提供一定程度的可用性(availbility):即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求
注意不要使用127.0.0.1,要使用真实的IP地址
我们可以发现集群启动了
然后以集群的方式进入客户端
redis-cli -c(cluster) -p 端口号
测试一下
可以使用cluster nodes命令查看集群信息
我们可以使用{}来指定相关组,相同组之间的数据必定在同一个插槽中
何为slot?
回答:
1 从节点会变为主节点
2 主节点会变成从节点
3 不能继续
Redis集群提供了以下好处:
1 实现扩容
2 分摊压力
3 无中心配置相对简单
Redis集群的不足
1 多键操作是不被支持的
2 多键的Redis事务是不被支持的,lua脚本也不被支持
3 由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过度,复杂度过度
Redis集群的java操作
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(); }