redis分片
本文是在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:
更多的细节问题还需要私下多多研究
祝:
大家生活愉快,工作顺利