springboot jedis配置以及集群(第四篇) 实现redis单机和集群

24 篇文章 0 订阅
6 篇文章 0 订阅

第一篇 redis以及redis集群原理及简介

第二篇 ubuntu16设置redis主从备份

第三篇 ubuntu16设置redis集群

第四篇 实现redis单机和集群

第五篇 redis-cli集群操作说明

 

 

 

1. 引入pom

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>3.3.0</version>
</dependency>

2. 实现自动配置导入

2.1 定义yml内容

redis:
    cluster:
        nodes: 192.168.1.47:8082,192.168.1.47:8083,192.168.1.47:8084,192.168.1.47:8085,192.168.1.47:8086,192.168.1.47:8087
        node: 192.168.1.21
        port: 6379
        password: tina1002
        timeout: 2000
        database: 1
        maxIdle: 10
        minIdle: 10
        maxTotal: 20
        maxAttempts: 5

2.2 定义导入类

@Data
public class RedisConfig {

    //node address
    private Set<String> nodes;

    private String node;

    //port for redis
    private  Integer  port;

    //password for redis
    private  String  password;

    private  Integer  timeout;

    private  Integer  database;

    private  Integer  maxIdle;

    private  Integer  minIdle;

    private  Integer  maxTotal;

    private  Integer  maxAttempts;

}

2.3 定义属性类

@Data
@ConfigurationProperties(prefix = "redis.cluster")
public class RedisConfigProperty {

    //node address
    private Set<String> nodes;

    private String node;

    //port for redis
    private  Integer  port;

    //password for redis
    private  String  password;

    private  Integer  timeout;

    private  Integer  database;

    private  Integer  maxIdle;

    private  Integer  minIdle;

    private  Integer  maxTotal;

    private  Integer  maxAttempts;

}

2.4 自动导入设置

@Configuration
@EnableConfigurationProperties(RedisConfigProperty.class)
@ConditionalOnClass(RedisConfig.class)
@ConditionalOnProperty(prefix = "redis.cluster", value = "", matchIfMissing = true)
public class RedisAutoConfig {

    @Autowired
    private RedisConfigProperty redisConfigProperty;

    @Bean
    public RedisConfig redisConfig(){
        RedisConfig redisConfig = new RedisConfig();
        redisConfig.setNodes(redisConfigProperty.getNodes());
        redisConfig.setNode(redisConfigProperty.getNode());
        redisConfig.setPort(redisConfigProperty.getPort());
        redisConfig.setPassword(redisConfigProperty.getPassword());
        redisConfig.setDatabase(redisConfigProperty.getDatabase());
        redisConfig.setTimeout(redisConfigProperty.getTimeout());
        redisConfig.setMaxTotal(redisConfigProperty.getMaxTotal());
        redisConfig.setMinIdle(redisConfigProperty.getMinIdle());
        redisConfig.setMaxIdle(redisConfigProperty.getMaxIdle());
        redisConfig.setMaxAttempts(redisConfigProperty.getMaxAttempts());
        return redisConfig;
    }

2.5 实现单机和集群代码

@Configuration
public class RedisServer {

    @Autowired
    private RedisConfig redisConfig;

    @Bean
    public JedisCluster redisCluster() {

        if (CollectionUtils.isEmpty(redisConfig.getNodes())) {
            throw new RuntimeException();
        }

        // 设置redis集群的节点信息
        Set<HostAndPort> nodes = redisConfig.getNodes().stream().map(node -> {
            String[] nodeInfo = node.split(":");
            if (nodeInfo.length == 2) {
                return new HostAndPort(nodeInfo[0], Integer.parseInt(nodeInfo[1]));
            } else {
                return new HostAndPort(nodeInfo[0], 6379);
            }
        }).collect(Collectors.toSet());

        // 配置连接池
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(redisConfig.getMaxTotal());
        jedisPoolConfig.setMaxIdle(redisConfig.getMaxIdle());
        jedisPoolConfig.setMinIdle(redisConfig.getMinIdle());

        // 创建jediscluster,传入节点列表和连接池配置
        //JedisCluster cluster = new JedisCluster(nodes, jedisPoolConfig);
        JedisCluster cluster = new JedisCluster(nodes,redisConfig.getTimeout(),redisConfig.getTimeout()
                ,redisConfig.getMaxAttempts(),redisConfig.getPassword(),jedisPoolConfig);

        System.out.println("cluster=="+cluster);
        return cluster;
    }

    @Bean
    public Jedis jedis() {
        // 配置连接池
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(redisConfig.getMaxTotal());
        jedisPoolConfig.setMaxIdle(redisConfig.getMaxIdle());
        jedisPoolConfig.setMinIdle(redisConfig.getMinIdle());

        JedisPool pool = new JedisPool(jedisPoolConfig, redisConfig.getNode(), redisConfig.getPort(),
                redisConfig.getTimeout(), redisConfig.getPassword(), redisConfig.getDatabase());

        System.out.println("pool=="+pool.getResource());
        return pool.getResource();
    }


}

2.6  测试功能

    @Test
    public void test() {
        System.out.println("redisConfig=="+redisConfig);
        jedis.set("jedis","1222");

        String j =  jedis.get("jedis");

        System.out.println("jedis==="+j);

        jedisCluster.set("jedisCluster","121312");

        String jc =  jedisCluster.get("jedisCluster");

        System.out.println("jedisCluster=="+jc);

    }

测试结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值