发布时间:2023-01-10 17:00
将一个业务分割成多个子业务,然后将他们分布在不同的机器上进行相同业务的处理,这就叫做分布式。
后期访问数据量较大的时候,会牵扯到高并发的一个问题,所以就可以通过加服务器进行解决,在多个子业务上添加多个目标相同的服务器,一个服务器崩溃,另一个服务器会补充上。
所谓槽,就是存东西的,在redis里它是通过key计算存放数据的,存放在对应的服务器,获取也是同样的算法,默认16384个槽位要均匀分布到主节点上,为了槽数据的安全,要对 主节点进行1-N的节点备份。
所有主节点进行投票,默认是半数以上挂点,容错机制开启,将从节点更改为主节点。
-c
redis是主从复制的机制,主机自动将将数据同步更新到从机,可以进行读写分离。
缺点:
(1.)主机和从机的宕(dang)机,会造成前端读取数据丢失请求失败,只有重启机器或者更改Ip才可以。
(2.)主机宕机会造成从机同步数据失败,重启机器或重新匹配IP会使得引入数据不一致,降低了系统的可用性。
(3.)redis的在线扩容技术未成熟,后期数据量太大,数据的扩容会是一个大难题。
哨兵模式是监控主机和从机是否能正常运行。
主机宕机,从机会自动转换为主机。(反客为主)
这种主从任意切换的机制,使得系统更健壮,可用性更高。
@Testpublic void testJedisCluster() throws Exception {
//创建一连接,JedisCluster对象,在系统中是单例存在
Set nodes = new HashSet<>();
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();
}
第二种方法:通过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);
}