Redis是目前业界使用最广泛的内存数据存储,我们常用作数据缓存。相比memcached,Redis支持更丰富的数据结构,例如hash, list, set等,同时它也支持数据持久化。而且在一个spring Boot项目中,因为spring Boot封装自动化的特性,redis连接池的配置也相当简单。
配置步骤如下:
1、在pom文件中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
引入spring-boot-starter-redis后,我们就可以通过配置RedisConnectionFactory中的相关参数去实现连接redis service。RedisConnectionFactory是一个接口,有4个具体的实现类。
2、在配置文件中添加配置数据
这里配置了生产环境和开发环境,项目启动后根据环境变量自动选择连接。
# 端口号
redis.port.production =16379
redis.port.develop =16379
redis.port=${redis.port.${ftcsp_env}}
# ip
redis.ip.production =192.168.100.66
redis.ip.develop =119.29.162.88
redis.ip=${redis.ip.${ftcsp_env}}
# 密码
redis.pass.production =123456
redis.pass.develop =123456
redis.pass=${redis.pass.${ftcsp_env}}
# redis 配置(在配置类中使用)
# Redis 数据库索引(默认为零)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=${redis.ip}
# Redis服务器连接端口
spring.redis.port=${redis.port}
# Redis服务器连接密码
spring.redis.password=${redis.pass}
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=-1
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接(使用负值表示没有限制)
spring.redis.pool.max-idle=-1
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
3、建立redis配置类
在配置文件中配置好数据后,还需要建立一个redis的配置类,主要用来加载配置文件中的相关参数(具体配什么数据按实际需求)。
/**
*
* <pre>
* <pre>
* redis数据库连接池配置
* </pre>
*
*<pre>
* @author chendengzhu chendengzhu@foresee.com.cn
* 修改记录
* </pre>
*/
@Configuration
@EnableCaching
public class RedisConfiguration {
Logger logger = LoggerFactory.getLogger(RedisConfiguration.class);
//服务器地址
@Value("${spring.redis.host}")
private String host;
//端口号
@Value("${spring.redis.port}")
private int port;
//超时时间
@Value("${spring.redis.timeout}")
private int timeout;
//最大连接数
@Value("${spring.redis.pool.max-idle}")
private int maxIdle;
//最大等待时间
@Value("${spring.redis.pool.max-wait}")
private long maxWaitMillis;
//密码
@Value("${spring.redis.password}")
private String password;
@Bean
public JedisPool redisPoolFactory() {
logger.info("jedis连接成功!!");
logger.info("redis地址:" + host + ":" + port);
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
return jedisPool;
}
}
做完这步,redis连接池已配置完成,下面是一个使用例子:
import redis.clients.jedis.Jedis;
import redis.clients.util.Pool;
@Service
public class RobotRestServiceImpl implements RobotRestService {
private final static Logger LOG = LoggerFactory.getLogger(RobotRestServiceImpl.class);
@Autowired
private Pool<Jedis> jedisPool;
//保存方法,保存的数据结构为hash
public boolean hset(String key, Map<String, String> hash) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.hmset(key, hash);
//设置生存时间
jedis.expire(key, 3600);
LOG.info("redis保存成功");
return true;
}
catch (Exception e) {
isBroken = true;
LOG.info("redis保存失败");
return false;
}
finally {
release(jedis, isBroken);
}
}
}
拜拜QAQ!