Springboot整合Jedis实现单机版或哨兵版可切换配置

Springboot整合Jedis实现单机版或哨兵版可切换配置

前言

前文写到借助redis实现Shiro实现session限制登录数量踢人下线,本文就写一下Jedis的配置,可切换单机版和集群哨兵版,方便开发测试。

实现

很简单,直接上代码,通过@ConditionalOnProperty获取配置文件设置的值从而实例化我们所需要的连接池。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;
import java.util.HashSet;

@SpringBootConfiguration
public class RedisConfig {

    private static Logger logger = LoggerFactory.getLogger(RedisConfig.class);

    @Value("${redis.maxIdle}")
    private Integer maxIdle;
    @Value("${redis.maxTotal}")
    private Integer maxTotal;
    @Value("${redis.host}")
    private String host;
    @Value("${redis.password}")
    private String password;
    @Value("${redis.port}")
    private Integer port;

    @Value("${redis.sentinels.set}")
    private HashSet<String> sentinels;
    @Value("${redis.sentinels.master}")
    private String sentinelsMaster;
    @Value("${redis.sentinels.password}")
    private String sentinelsPassword;

    public JedisPoolConfig jedisPoolConfig(){    //这个是修改redis性能的时候需要的对象
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxTotal(maxTotal);
        jedisPoolConfig.setTestOnBorrow(true);

        return jedisPoolConfig;
    }

    @Bean
    @ConditionalOnProperty(value = "redis.sentinel.enable", havingValue = "false", matchIfMissing = true)
    public JedisPool jedisPool(){
        logger.info("加载JedisPool");
        JedisPoolConfig jedisPoolConfig = jedisPoolConfig();
        return new JedisPool(jedisPoolConfig, host, port, 10000, password);
    }

    @Bean
    @ConditionalOnProperty(value = "redis.sentinel.enable", havingValue = "true", matchIfMissing = false)
    public JedisSentinelPool jedisSentinelPool() {
        logger.info("加载JedisSentinelPool");
        JedisPoolConfig config = jedisPoolConfig();
        JedisSentinelPool jedisPool = new JedisSentinelPool(sentinelsMaster, sentinels, config, 10000, sentinelsPassword);
        return jedisPool;
    }
}


JedisUtils 加入这段以选择所用的连接池


public class JedisUtils {
	private static Logger logger = LoggerFactory.getLogger(JedisUtils.class);
	private static Pool jedisPool =  null;
	static {
		try {
			jedisPool = SpringContextHolder.getBean(JedisSentinelPool.class);
		} catch (Exception e) {
			logger.warn("切换为JedisPool");
			jedisPool = SpringContextHolder.getBean(JedisPool.class);
		}
	}
}


配置

# false:直连单机 true:连接哨兵
redis.sentinel.enable=true

redis.sentinels.set=127.0.0.1:6390,127.0.0.1:6391,127.0.0.1:6392
redis.sentinels.master=bbq
redis.sentinels.password=123456

redis.host=127.0.0.1
redis.password=123456
redis.port=6379

#最大连接数
redis.maxTotal=60000
#最大空闲连接
redis.maxIdle=300
#最小空闲连接
redis.minIdle=5

最后

只需修改redis.sentinel.enable配置值就可以切换项目连接池。

在Spring Boot中,可以通过整合Jedis来使用Redis作为缓存或者消息队列。下面是整合Jedis的步骤: 1. 添加依赖:在`pom.xml`文件中添加Jedis的依赖。可以使用以下依赖配置: ```xml <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency> ``` 2. 配置Redis连接信息:在`application.properties`文件中配置Redis的连接信息,包括主机、端口、密码等。例如: ```properties spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= ``` 3. 创建Jedis连接池:在Spring Boot的配置类中创建Jedis连接池的Bean。可以使用以下代码示例: ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; @Configuration public class RedisConfig { @Value("${spring.redis.host}") private String redisHost; @Value("${spring.redis.port}") private int redisPort; @Value("${spring.redis.password}") private String redisPassword; @Bean public JedisPool jedisPool() { JedisPoolConfig poolConfig = new JedisPoolConfig(); return new JedisPool(poolConfig, redisHost, redisPort, redisPassword); } } ``` 4. 使用Jedis进行操作:在需要使用Redis的地方,通过注入JedisPool对象并调用相应的方法来进行操作。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; @Service public class RedisService { @Autowired private JedisPool jedisPool; public void set(String key, String value) { try (Jedis jedis = jedisPool.getResource()) { jedis.set(key, value); } } public String get(String key) { try (Jedis jedis = jedisPool.getResource()) { return jedis.get(key); } } } ``` 以上就是Spring Boot整合Jedis的基本步骤。通过配置Redis连接信息和使用JedisPool对象,可以方便地在Spring Boot项目中使用Redis。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值