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