分布式和集群的理解和redis集群及jidis连接集群和Spring控制反转

分布式:

将一个业务分割成多个子业务,然后将他们分布在不同的机器上进行相同业务的处理,这就叫做分布式。

集群:

后期访问数据量较大的时候,会牵扯到高并发的一个问题,所以就可以通过加服务器进行解决,在多个子业务上添加多个目标相同的服务器,一个服务器崩溃,另一个服务器会补充上。

redis——cluster槽:

所谓槽,就是存东西的,在redis里它是通过key计算存放数据的,存放在对应的服务器,获取也是同样的算法,默认16384个槽位要均匀分布到主节点上,为了槽数据的安全,要对 主节点进行1-N的节点备份。

redis-cluster槽的选票机制:

所有主节点进行投票,默认是半数以上挂点,容错机制开启,将从节点更改为主节点。

链接redis集群的命令:

-c

redis的集群:

redis是主从复制的机制,主机自动将将数据同步更新到从机,可以进行读写分离。

缺点:

(1.)主机和从机的宕(dang)机,会造成前端读取数据丢失请求失败,只有重启机器或者更改Ip才可以。

(2.)主机宕机会造成从机同步数据失败,重启机器或重新匹配IP会使得引入数据不一致,降低了系统的可用性。

(3.)redis的在线扩容技术未成熟,后期数据量太大,数据的扩容会是一个大难题。

redis的哨兵(sentinel)模式:

哨兵模式是监控主机和从机是否能正常运行。

主机宕机,从机会自动转换为主机。(反客为主)

这种主从任意切换的机制,使得系统更健壮,可用性更高。

redis怎么通过jedis连接集群
第一种方法:通过代码

@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);

    }


 

你可能感兴趣的:(分布式,redis,java)