一、說明
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;
}
}
