关于java:Redis分片

1.Redis分片机制

1.1为什么须要分片机制

如果须要存储海量的内存数据,如果只应用一台redis,无奈保障redis工作效率.大量的工夫都节约在了寻址当中.所以须要一种机制,来满足这种需要.
采纳分片机制实现:

1.2Redis分片搭建

1.2.1搭建注意事项

Redis服务启动须要依赖redis.conf的配置文件.如果须要筹备3台redis则须要筹备3个redis.conf的配置.
筹备端口号
6379
6380
6381

1.2.2分片实现

批改端口号:间各自的端口号进行批改

启动3台redis服务器

校验服务器是否失常运行

1.2.3对于分片的注意事项

1.问题形容
当启动多台redis服务器之后,多台redis临时没有必然的分割,各自都是独立的实体,能够数据的存储.
2.如果将分片通过程序的形式进行操作,要把3台redis当做一个整体,所以与上述的操作齐全不同,不会呈现一个key同时保留多个redis的景象.

1.3分片入门案例

 /**
     * 测试Redis分片机制
     * 思考: shards 如何确定应该存储到哪台redis中呢???
     */
    @Test
    public void testShards(){
        List<JedisShardInfo> shards = new ArrayList<>();
        shards.add(new JedisShardInfo("192.168.126.129",6379));
        shards.add(new JedisShardInfo("192.168.126.129",6380));
        shards.add(new JedisShardInfo("192.168.126.129",6381));
        //筹备分片对象
        ShardedJedis shardedJedis = new ShardedJedis(shards);
        shardedJedis.set("shards","redis分片测试");
        System.out.println(shardedJedis.get("shards"));
    }

1.4一致性hash算法

1.4.1一致性hash算法介绍

一致性hash算法在1997年由麻省理工学院提出,是一种非凡的算法,目标是解决分布式缓存问题.在移除或者增加一个服务器时,可能尽可能小地扭转已存在的服务申请与解决申请服务器之间的映射关系。一致性哈希解决了简略哈希算法在分布式哈希表( Distributed Hash Table,DHT) 中存在的动静伸缩等问题 。

1.4.2个性1-平衡性

概念:平衡性是指hash的后果应该平均分配各个节点,这样从算法上解决了负载平衡问题.(大抵平分)
问题形容:因为节点都是通过hash形式进行合计,所以可能呈现如图中的景象,导致负载重大不均衡.

解决办法:引入虚构节点

1.4.3个性2-枯燥性

特点:枯燥性是指在新增或者删除节点时,不影响零碎失常运行.

1.4.4个性3-分散性

谚语:鸡蛋不要放到一个篮里.
分散性是指数据应该扩散地寄存在分布式集群中的各个节点(节点本人能够有备份),不用每个节点都存储的数据.

1.5SpringBoot整合Redis分片

1.5.1编辑配置文件

# 配置redis单台服务器
redis.host=192.168.126.129
redis.port=6379

# 配置redis分片机制
redis.nodes=192.168.126.129:6379,192.168.126.129:6380,192.168.126.129:6381

1.5.2编辑配置类

@Configuration
@PropertySource("classpath:/properties/redis.properties")
public class JedisConfig {

    @Value("${redis.nodes}")
    private String nodes;  //node,node,node.....

    //配置redis分片机制
    @Bean
    public ShardedJedis shardedJedis(){
        nodes = nodes.trim();   //去除两边多余的空格
        List<JedisShardInfo> shards = new ArrayList<>();
        String[] nodeArray = nodes.split(",");
        for (String strNode : nodeArray){   //strNode = host:port
            String host = strNode.split(":")[0];
            int port = Integer.parseInt(strNode.split(":")[1]);
            JedisShardInfo info = new JedisShardInfo(host, port);
            shards.add(info);
        }
        return new ShardedJedis(shards);
    }
   }

1.5.3批改AOP注入项

~~~~

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理