Jedis连接Redis哨兵
一、导入依赖
<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();
}
}
}
}
版权申明
本文系作者 @WangJun 原创发布在wangjun's blog站点。未经许可,禁止转载。
暂无评论数据