Java之Redis集群

1.Redis集群

1.1 Redis分区说明

Redis分区只负责 数据应该存储到哪里的问题.至于是否能存储的下 完全由Redis内存决定.
在这里插入图片描述
特点:
1.hash(key1)%16384 = 3000
2.hash(key2)%16384 = 3000 key1和key2 都归第一个节点进行管理.

1.2 Redis hash槽与一致性 hash算法的区别

1.运算位置不同.
1.redis分片机制在业务服务器中完成的运算.
2.redis分区算法在连接Redis之后,由redis进行计算.
2.算法不同 一致性hash算法/hash槽算法.
3.redis分片可以随意的进行数据的保存. redis分区不能随机存储.分区中只能保存属于我的key.

1.3 Redis面试题

1.Redis集群中的主机最多 多少台? 16384个.
Redis集群内存多少最多可以扩展到原有redis多少倍.
2.Redis中存储的数据最多16384个??? 不对的. 16384只是分区的大小.至于能存储多少数据,完全由内存决定.

1.4 Redis集群宕机条件说明

说明: redis集群中 只要有一台Redis 主机宕机. 则整个Redis集群崩溃(可以进行高可用)
问题分析:
1.如果有6台Redis搭建集群,问: 最少宕机多少台Redis集群崩溃??? 宕机2台集群崩溃
2.如果搭建9台Redis.3台主机, 问 :最少宕机Redis台 集群奔溃??? 宕机5台集群崩溃

补充说明:如果想让集群尽可能不宕机,则适当增加从节点的数量. 2-3个从即可.

1.5 什么是脑裂现象

说明:在集群的机制中,由主机进行选举,当主机在进行选举时如果连续3次出现平票的结果时,则可能引发脑裂现象.
问题:出现脑裂现象的概率是多少? 答: 1/8=12.5%

如何有效降低脑裂现象: 可以通过增加主机的数量来有效降低脑裂的发生

1.6Spring整合Redis集群

1.6.1 编辑pro配置文件
# 配置单台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

# 配置Redis集群
redis.nodes=192.168.126.129:7000,192.168.126.129:7001,192.168.126.129:7002,192.168.126.129:7003,192.168.126.129:7004,192.168.126.129:7005
1.6.2 编辑配置类
package com.jt.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import redis.clients.jedis.*;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Configuration  //标识我是配置类
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {

    /**
     * 引入redis集群配置
     */
    @Value("${redis.nodes}")
    private String nodes;   //node,node,node

    @Bean
    public JedisCluster jedisCluster(){
        String[] strNodes = nodes.split(","); //[node1,nod2,nod3.....]
        Set<HostAndPort> set = new HashSet<>();
        for(String node : strNodes){  //node=host:port
            String host = node.split(":")[0];
            int port = Integer.parseInt(node.split(":")[1]);
            set.add(new HostAndPort(host,port));
        }

        return new JedisCluster(set);
    }


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

    *//**
     * spring整合redis分片机制
     *//*
    @Bean
    public ShardedJedis shardedJedis(){
        //1.获取每个节点的信息
        String[] strNodes = nodes.split(",");
        List<JedisShardInfo> shards = new ArrayList<>();
        //2.遍历所有node.为list集合赋值
        for(String node :strNodes){ //node=ip:port
            String host = node.split(":")[0];
            int port = Integer.parseInt(node.split(":")[1]);
            JedisShardInfo info = new JedisShardInfo(host,port);
            shards.add(info);
        }

        ShardedJedis shardedJedis = new ShardedJedis(shards);
        return shardedJedis;
    }*/

  /*  @Value("${redis.host}")
    private String  host;
    @Value("${redis.port}")
    private Integer port;

    //SpringBoot管理  Spring框架的优化的API
    @Bean
    public Jedis jedis(){

        return new Jedis(host,port);
    }*/
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值