一、说明
Spring中可以配置RedisTemplate来操作Redis,但是本文中并没有使用RedisTemplate,而是单纯的使用Spring的IoC,单独创建一个配置类,用来配置Redis,然后在需要进行Redis操作的地方,注入配置的Jedis即可。
也就是说,本文中的内容,单纯地使用Jedis,其实和普通java项目配置Redis并没有太多的不同。
二、JedisCluster集群配置
集群配置,需要先有一个Redis集群,可以参考:Redis集群搭建、使用Jedis操作Redis
2.1、导入依赖
仍旧使用上面的依赖,不需要导入spring-boot-starter-cache、spring-boot-starter-data-redis,只需要导入jedis即可。
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency>
2.2、配置文件
在配置文件中加入一下内容:
# redis集群的节点信息 redis.cluster.nodes=192.168.1.3:6379,192.168.1.4:6379,192.168.1.5:6379 # redis连接池的配置 redis.cluster.pool.max-active=8 redis.cluster.pool.max-idle=5 redis.cluster.pool.min-idle=3
2.3、创建配置类
下面是示例代码:
package cn.ganlixin.ssm.config;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import java.util.Set;
import java.util.stream.Collectors;
@Configuration
public class RedisClusterConfig {
private static final Logger log = LoggerFactory.getLogger(RedisClusterConfig.class);
@Value("${redis.cluster.nodes}")
private Set<String> redisNodes;
@Value("${redis.cluster.pool.max-active}")
private int maxTotal;
@Value("${redis.cluster.pool.max-idle}")
private int maxIdle;
@Value("${redis.cluster.pool.min-idle}")
private int minIdle;
// 初始化redis配置
@Bean
public JedisCluster redisCluster() {
if (CollectionUtils.isEmpty(redisNodes)) {
throw new RuntimeException();
}
// 设置redis集群的节点信息
Set<HostAndPort> nodes = redisNodes.stream().map(node -> {
String[] nodeInfo = node.split(":");
if (nodeInfo.length == 2) {
return new HostAndPort(nodeInfo[0], Integer.parseInt(nodeInfo[1]));
} else {
return new HostAndPort(nodeInfo[0], 6379);
}
}).collect(Collectors.toSet());
// 配置连接池
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal);
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMinIdle(minIdle);
// 创建jediscluster,传入节点列表和连接池配置
JedisCluster cluster = new JedisCluster(nodes, jedisPoolConfig);
log.info("finish jedis cluster initailization");
return cluster;
}
}
2.4、测试使用
使用的时候,只需要注入redisCluster即可。
package cn.ganlixin.ssm.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.JedisCluster;
import javax.annotation.Resource;
@RestController
@RequestMapping("redis")
public class RedisController {
@Resource
private JedisCluster redisCluster;
@RequestMapping("test")
public String test() {
redisCluster.set("hello", "world");
String val = redisCluster.get("hello");
return val;
}
}