SpringBoot配置Redis链接池

首先是redis各个参数的配置,在 application-dev.properties中配置以下:web

#redis配置
redis.server.host=192.168.50.162
redis.server.port=6379
redis.server.password=password
redis.server.timeOut=5000
redis.server.maxIdle=50
redis.server.maxWaitMillis=5000
redis.server.maxTotal=500

对 redis 配置参数进行读取和绑定,配置属性注入到 JedisProperties redis

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = JedisProperties.JEDIS_PREFIX)
public class JedisProperties {

	public static final String JEDIS_PREFIX = "redis.server";

	private String host;

	private int port;

	private String password;

	private int maxTotal;

	private int maxIdle;

	private int maxWaitMillis;

	private int timeOut;

	public int getTimeOut() {
		return timeOut;
	}

	public void setTimeOut(int timeOut) {
		this.timeOut = timeOut;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getHost() {
		return host;
	}

	public void setHost(String host) {
		this.host = host;
	}

	public int getPort() {
		return port;
	}

	public void setPort(int port) {
		this.port = port;
	}

	public int getMaxTotal() {
		return maxTotal;
	}

	public void setMaxTotal(int maxTotal) {
		this.maxTotal = maxTotal;
	}

	public int getMaxIdle() {
		return maxIdle;
	}

	public void setMaxIdle(int maxIdle) {
		this.maxIdle = maxIdle;
	}

	public int getMaxWaitMillis() {
		return maxWaitMillis;
	}

	public void setMaxWaitMillis(int maxWaitMillis) {
		this.maxWaitMillis = maxWaitMillis;
	}

}

配置了 Redis 链接池以后,将 Redis 链接池 注入到 RedisClient 中,并生成 RedisClient Beanspring

import com.mljr.auth.config.properties.JedisProperties;
import com.mljr.auth.util.RedisClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
@EnableConfigurationProperties(JedisProperties.class)
@ConditionalOnClass(RedisClient.class)
public class JedisConfig {

	private Logger logger = LoggerFactory.getLogger(JedisConfig.class);

	@Autowired
	private JedisProperties prop;

	@Bean(name = "jedisPool")
	public JedisPool jedisPool() {
		JedisPoolConfig config = new JedisPoolConfig();
		config.setMaxTotal(prop.getMaxTotal());
		config.setMaxIdle(prop.getMaxIdle());
		config.setMaxWaitMillis(prop.getMaxWaitMillis());
		return new JedisPool(config, prop.getHost(), prop.getPort(), prop.getTimeOut(), prop.getPassword());
	}

	@Bean
	@ConditionalOnMissingBean(RedisClient.class)
	public RedisClient redisClient(@Qualifier("jedisPool") JedisPool pool) {
		logger.info("初始化……Redis Client==Host={},Port={}", prop.getHost(), prop.getPort());
		RedisClient redisClient = new RedisClient();
		redisClient.setJedisPool(pool);
		return redisClient;
	}

}

配置一些经常使用的 redis 的操做:app

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class RedisClient {

	private JedisPool jedisPool;

	public void set(String key, Object value) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			jedis.set(key, value.toString());
		}catch (Exception e){
			e.printStackTrace();
		}finally {
			jedis.close();
		}
	}

	/**
	 * 设置过时时间 
	 * @param key
	 * @param value
	 * @param exptime
	 * @throws Exception
	 */
	public void setWithExpireTime(String key, String value, int exptime) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			jedis.set(key, value, "NX", "EX", 300);
		} catch (Exception e){
			e.printStackTrace();
		}finally {
			jedis.close();
		}
	}

	public String get(String key) {

		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			return jedis.get(key);
		} catch (Exception e){
			e.printStackTrace();
		}finally {
			if (jedis != null)
			jedis.close();
		}
		return null;
	}
	public JedisPool getJedisPool() {
		return jedisPool;
	}

	public void setJedisPool(JedisPool jedisPool) {
		this.jedisPool = jedisPool;
	}

}

大功告成,使用注解的方式引入就可使用了svg

@Autowired
    private RedisClient redisClient;
    ....
    ....
    ....