首页 > 技术文章 > redis分片

liuconglin 2016-09-27 22:40 原文

本文是在window环境下测试

什么是分片

当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储

那么当多个请求来取数据时,如何知道数据在哪个redis呢,redis有自己的算法,下图是负载均衡的理解

 

步骤:

第一步:分配端口号,启动redis服务

  master1: 6500     master: 6501

第二步:测试

    jar:

 

     代码:

/**
     * 测试,多个主节点,分片    
     */
    @Test
    public void test02(){    
        //GenericObjectPoolConfig对象代表池的配置
        GenericObjectPoolConfig config  = new JedisPoolConfig();
        
        //设置redis服务器群
        List<JedisShardInfo> list = new ArrayList<JedisShardInfo>();
        
        //第一个主机
        JedisShardInfo shard1 = new JedisShardInfo("localhost",6500);
        shard1.setPassword("1");
        list.add(shard1);
        
        //第二个主机
        JedisShardInfo shard2 = new JedisShardInfo("localhost",6501);
        shard2.setPassword("1");
        list.add(shard2);
        
        //把服务器群加入到连接池中
        ShardedJedisPool pool = new ShardedJedisPool(config,list);
         
        //ShardedJedis对象可以存取数据
        ShardedJedis jedis = pool.getResource();
            
        //看key在主机点的分布情况
        for(int i = 0 ; i < 100;i++){
            jedis.set("user"+i, "value"+i);
        }
        
        //JedisShardInfo对象代表redis服务器,获得key=user1所在的redis服务器
        JedisShardInfo info = jedis.getShardInfo("user1");
        
        //查看主机
        String host = info.getHost();
        
        //获取redis服务器的端口号
        int port = info.getPort();
        
        System.out.println(host + " : " + port );
        
        //归还资源
        pool.returnResource(jedis);
    }

  结果:

  master1:

     master2:

  

  更多的细节问题还需要私下多多研究

推荐阅读