答:一个业务分拆多个子业务,部署在不同的服务器上实现相同的业务就是分布式若是一个字节业务点垮了 那么整个项目将无法运行
为了解决大型网站的访问量大、并发量高、海量数据的问题 和对分布式的问题进行解决的一个方案 将几台服务器集中在一起,实现同一业务,多个处理相同功能的服务器集合。若一台服务器垮了,其它的服务器可以顶上来。
区别:集群是相当于一个存储数据的地方 而分布式就是就是一直工作的方式
相似点 就是集群只要布置在不同的服务器上或者不同的机器上就可以称为集群
分布式一个程序运行在不同的机器上就可以称为分布式
联系:集群可能运行在一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。
三种方式:
① 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离
缺点:
① 监控主服务器和从服务器是否正常运行。
② 主服务器出现故障时自动将从服务器转换为主服务器。
③ 主从可以自动切换,系统更健壮,可用性更高。
缺点:
1.Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。
槽是存放数据,存放是要通过key计算槽位,选择对应的服务器来存储,获取也是同样的算法.
默认16384个槽位要均匀分布到主节点上面
为了槽里面数据安全要对主节点进行1-N从节点备份
所有主节点都参与投票,默认半数以上挂点,启动容错机制,提升从节点为主节点.
7)怎么通过命令连接redis集群 -c
1.通过代码
@Testpublic void testJedisCluster() throws Exception {
//创建一连接,JedisCluster对象,在系统中是单例存在
Set
nodes.add(new HostAndPort("127.0.0.1", 7001));
nodes.add(new HostAndPort("127.0.0.1", 7002));
nodes.add(new HostAndPort("127.0.0.1", 7003));
nodes.add(new HostAndPort("127.0.0.1", 7004));
nodes.add(new HostAndPort("127.0.0.1", 7005));
nodes.add(new HostAndPort("127.0.0.1", 7006));
JedisCluster cluster = new JedisCluster(nodes);
//执行JedisCluster对象中的方法,方法和redis一一对应。
cluster.set("cluster-test", "my jedis cluster test");
String result = cluster.get("cluster-test");
System.out.println(result);
//程序结束时需要关闭JedisCluster对象 cluster.close();
}
2.通过spring(ioc控制反转)
配置XML
测试代码:
private ApplicationContext applicationContext;
@Before
public void init() {
applicationContext = new ClassPathXmlApplicationContext(
"classpath:applicationContext.xml");
}
// redis集群 @Test
public void testJedisCluster() {
JedisCluster jedisCluster = (JedisCluster) applicationContext
.getBean("jedisCluster");
jedisCluster.set("name", "zhangsan");
String value = jedisCluster.get("name");
System.out.println(value);
}