redis分片技术

Posted 我爱si搬砖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis分片技术相关的知识,希望对你有一定的参考价值。

1.也无需求

  1. 如果需要动态的扩展内存,单个redis节点上有上限(10M默认-512M-1GB)
  2. 如果将数据保存到一个redis节点中,可能会出现丢数据的风险.所以尽可能分开保存.

2.分片机制介绍

特点:

  1. 多台redis节点将内存扩大N倍
  2. 多台redis共同唯一所有的数据.每个节点中所保存的数据都不一样的.

 

 

3.redis分片配置步骤

  (1)复制配置文件

 

(2)修改端口号

 

 

 (3)启动多态redis

redis-server redis-6379.conf
[root@localhost shards]# redis-server redis-6380.conf
[root@localhost shards]# redis-server redis-6381.conf
[root@localhost shards]# ps -ef |grep redis
root      9789     1  0 19:41 ?        00:00:00 redis-server *:6379         
root      9794     1  0 19:41 ?        00:00:00 redis-server *:6380         
root      9798     1  0 19:41 ?        00:00:00 redis-server *:6381         
root      9804  7057  0 19:41 pts/2    00:00:00 grep redis

 

4.redis分片入门案例

  连接池操作

@Test
    public void test01(){
        List<JedisShardInfo> shards = new ArrayList<>();
        shards.add(new JedisShardInfo("192.168.126.166", 6379));
        shards.add(new JedisShardInfo("192.168.126.166", 6380));
        shards.add(new JedisShardInfo("192.168.126.166", 6381));
        
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(500);
        config.setMaxIdle(20);//设定最大空闲链接
        
        //实现链接池的操作
        ShardedJedisPool pool = 
                new ShardedJedisPool(config, shards);
        /*ShardedJedis shardedJedis = 
                new ShardedJedis(shards);*/
        ShardedJedis shardedJedis =
                pool.getResource();
        shardedJedis.set("1807","学习redis分片");
        System.out.println("获取数据:"+shardedJedis.get("1807"));
        
        //shardedJedis.close();            //将链接直接关闭.
        pool.returnResource(shardedJedis);//将链接还回池中.
    }

 

5.Hash一致性算法

5.1数据存储策略

2^32=21亿

 

 5.2均衡性

  说明:采用均衡性的特点让数据尽可能均匀.如果分配不均则采用虚拟节点争抢数据.最终达到相对平衡.

  问题:Hash一致算法中存在的问题,如果计算的结果node节点分布不均匀.则可能会出现数据超过最大内存的现象.

  解决:尽可能的让节点均匀分配数据.

 

 

5.3单调性

  说明:当节点数量增加时,数据会重新进行挂载,但是尽可能保证原有的数据不变.

特列:

   如果使用分片的过程中,分片的节点突然宕机.会导致映射的内存缺失.直接导致整个分片将不能正常使用.

 

5.4分散性

  特点:由于分布式的原因.有些系统不能够看到全部的内存空间.会导致一个key出现多个位置的现象(不好的)

 

5.5负载

  说明:负载是分散性的另一种讨论,可能会出现一个位置有多个key的现象.

 

以上是关于redis分片技术的主要内容,如果未能解决你的问题,请参考以下文章

redis分片技术

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例

Redis-Cluster分片扩容

动手实践Redis主从复制Sentinel主从切换Cluster分片

Redis分片(分区)

Redis集群专题「集群技术三部曲」分析一下相关的Redis服务分片技术和Hash Tag(实战篇)