作为一款高效的K-V数据库,reids的身影在众多的企业级应用上都有出现,本文今天就讲解下在SpringBoot下如何连接和操作redis。
一、搭建和部署redis程序
要使用redis自然要将redis在服务器上搭建好,不会搭建的可以参考我另一篇文章。
其它:
redis集群的操作连接:SpringBoot下redis集群的操作和连接
二、配置相关依赖
添加redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
若是在项目创建的时候就选择了redis,那么创建完成的时候自动就会添加上该依赖,没有选择的添加上即可。
添加jedis依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
三、配置相关参数
配置文件为方便起见已被替换为yml格式:
其中最上面的一大块马赛克是mysql数据库的配置,这里关注下面redis和jedis的配置即可。host为地址信息,port为端口信息,password就是redis配置的访问密码。
四、JedisPool的设置
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @Author Kolloge
* @Project redisdemo
* @Date 2018/12/17 10:56
* @Description redis的相关配置
**/
@Component
@ConfigurationProperties(prefix="spring.datasource.redis")
public class RedisConfig {
private String host;
private int port;
private String password;
private int timeout;
private int maxIdle;
private long maxWaitMillis;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getTimeout() {
return timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public int getMaxIdle() {
return maxIdle;
}
public void setMaxIdle(int maxIdle) {
this.maxIdle = maxIdle;
}
public long getMaxWaitMillis() {
return maxWaitMillis;
}
public void setMaxWaitMillis(long maxWaitMillis) {
this.maxWaitMillis = maxWaitMillis;
}
/**
* @Author Kolloge
* @Project redisdemo
* @Date 2018/12/17 10:56
* @Description redis的配置,通过对配置文件内的参数读取,设置jedisPool
**/
@Bean
public JedisPool redisPoolFactory() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
return jedisPool;
}
}
这种方式可以直接将yml里配置的参数读取进来,也是十分的方便。
五、redis资源管理
import com.example.redisdemo.service.redis.RedisDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.ShardedJedis;
import java.util.Set;
/**
* @Author Kolloge
* @Project redisdemo
* @Date 2018/12/17 10:30
* @Description redis
**/
@Repository
public class RedisDataSourceImpl implements RedisDataSource {
private static final Logger logger = LoggerFactory.getLogger(RedisDataSourceImpl.class);
@Autowired
private JedisPool jedisPool;
@Override
public Jedis getRedisClient() {
try {
return jedisPool.getResource();
} catch (Exception e) {
logger.error("获取RedisClient异常:" + e);
}
return null;
}
@Override
public void returnResource(Jedis jedis, boolean broken) {
if (broken) {
if(jedis!=null){
jedis.close();
}
}
}
}
此处需要注意一点,此处只贴了impl没有贴出interface,直接使用务必自己写一个interface,如果你程序的路径和我的不一样,那第一条import务必修改
import com.example.redisdemo.service.redis.RedisDataSource;
六、访问redis
经过以上的配置我们已经可以开始使用redis了,以下的代码同样的不贴interface,只贴出impl,知道impl写出interface很随意。
import com.example.redisdemo.service.redis.RedisDao;
import com.example.redisdemo.service.redis.RedisDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import redis.clients.jedis.Jedis;
/**
* @Author Kolloge
* @Project redisdemo
* @Date 2018/12/17 10:40
* @Description
**/
@Repository
public class RedisDaoImpl implements RedisDao{
private static final Logger logger = LoggerFactory.getLogger(RedisDaoImpl.class);
@Autowired
private RedisDataSource redisDataSource;
@Override
public void putInfo2Redis(String str){
String keyName = "FirstInfo";
String fieldName = "redisDemo";
boolean broken = false;
Jedis shardedJedis = redisDataSource.getRedisClient();
if (shardedJedis == null) {
return;
}
try {
shardedJedis.hset(keyName,fieldName, str);
} catch (Exception e) {
broken = true;
} finally {
redisDataSource.returnResource(shardedJedis, broken);
}
}
}
这里存的数据类型是hash的其他的类型实现也大同小异,大家可以自行尝试一下。controller也就不写了,写个test看下运行结果,输入的str是 Hello World!