一、导入依赖

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

二、配置参数

server:
  port: 8099
  
spring:
  application:
    name: demoRedis
  redis:
    sentinel:
      master: xxxxx
      nodes: xx.xxx.xxx.xx:xxxx
    password: xxxxxxxxx
    ## 连接超时时间(毫秒)
    timeout: 1200
    database: 1

三、代码实现

Redis 哨兵连接配置类
package com.wj2y.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

import java.util.HashSet;
import java.util.Set;

@Configuration
public class RedisSentinelConfig {

    @Value("${spring.redis.sentinel.master}")
    private String masterName;

    @Value("${spring.redis.sentinel.nodes}")
    private String sentinelNodes;

    @Value("${spring.redis.timeout}")
    private int timeout;

    @Value("${spring.redis.password}")
    private String password;

    @Value("${spring.redis.database}")
    private int database;

    @Bean
    public JedisSentinelPool jedisSentinelPool() {
        Set<String> sentinels = new HashSet<>();
        String[] nodes = sentinelNodes.split(",");
        for (String node : nodes) {
            sentinels.add(node.trim());
        }

        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(10); // 设置最大连接数
        poolConfig.setMaxIdle(1);   // 设置最大空闲连接数
        poolConfig.setMinIdle(0);   // 设置最小空闲连接数
        poolConfig.setTestOnBorrow(true); // 在borrow连接前进行测试

        return new JedisSentinelPool(masterName, sentinels, poolConfig, timeout, password);
    }

    public Jedis getJedis() {
        Jedis jedis = null;
        try {
            jedis = jedisSentinelPool().getResource(); // 从哨兵池中获取资源
            jedis.select(database); // 选择数据库
            return jedis; // 返回已选择数据库的Jedis实例
        } catch (Exception e) {
            if (jedis != null) {
                jedis.close(); // 关闭连接
            }
            throw e; // 重新抛出异常
        }
    }
}
测试controller
package com.wj2y.controller;

import com.wj2y.config.RedisSentinelConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import redis.clients.jedis.Jedis;

import javax.annotation.Resource;

@RequestMapping("/redis")
@Controller
public class RedisController {

    @Autowired
    private RedisSentinelConfig redisSentinelConfig;

    @RequestMapping("/test")
    @ResponseBody
    public String test() {
        Jedis jedis = null;
        try {
            jedis = redisSentinelConfig.getJedis();
            if (jedis != null) {
                jedis.set("test", "jedis is not null");
                return jedis.get("test");
            } else {
                return "jedis is null";
            }
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }
}
分类: 技术 标签: RedisJedis哨兵

评论

暂无评论数据

暂无评论数据

目录