开发者学堂课程【SpringBoot 实战教程: SpringBoot 整合 Redis 集群】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/651/detail/10814
SpringBoot 整合 Redis 集群
1、使用上一个案例,所以依赖可以不用加。
<!--springboot整合redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、因为 redis 集群中有多个 redis 节点,所以需要配置每一个 redis 节点的 IP 地址和端口号,把以下代码配置在全局配置文件中即可。
spring.redis.cluster.nodes=192.168.22.12:6666
3、启动 redis 集群,redis 集群有6个 redis 节点,端口号从7550到7555。
spring.redis.cluster.nodes=
192.168.25.128: 755
0,
192.168.25.128: 755
1,
192.168.25.128: 755
2,
192.168.25.128: 755
3,
192.168.25.128: 755
4,
192.168.25.128: 755
5
4、访问 redis 集群,需要 JedisCluster 这个客户端对象,这个客户端对象需要自己进行配置,跟在 xml 配置文件中配置 JedisCluster 是一样的,只不过在 springboot 中不需要写 xml 文件,写一个配置类,命名为 RedisConfig。
创建配置类,跟 xml 文件写的配置是一样的,只不过以类的形式,既然作为一个配置,注意要加上注解,springboot 就会把所写的看成一个配置。
创建对象,注入到容器中封装成 postandport
package com. qianfeng. config;
import org. springframework . context . annotation. Bean;
import org. springframework. context . annotation. Configuration;
importredis.clients. jedis . JedisCluster;
@Configuration
public class RedisConfig
{
@Value ("$[spring. redis. cluster . nodes
}
")
字符串,对它进行切割,切割成每一个 IP 地址和端口号
Private
String
redisNodes ;
@Bean 创建对象,注入到容器中
public JedisCluster
getJedisCluster ()
{
String[ ]redi snodes
redisNodes . split (
‘’,’’)
Set<HostAndPort>nodes=new
HashSet<> ()
创建所有 redis 节点的集合
for (String node: redisnodes)
{
String[] arr=node . split (":") ;
IP 地址和端口号之间是冒号连接的,再切割一次
HostAndPort
hostAndPort
=
new
HostAndPort (arr [0] , Integer . parseInt (arr
[1])
需要单独的IP地址和端口号
JedisCluster cluster=new JedisCluster (nodes) ;
这个对象的创建需要每一个节点的 IP 地址和端口号,封装成 postandport 对象
return cluster
;
}
}
为0的是IP地址,为1的是端口号,但是端口号要是 Integer 类型的,进行转换,把它放到集合中,这样就把每一个 redis 节点的IP地址和端口号转换成 HostAndPort对象放到 set 集合中,再 把set 集合给 JedisCluster,这样就创建好 cluster 对象,就可以利用 JedisCluster 对象访问 redis 集群。
5、既然是配置,就需要扫描注解,在启动类中查看是 com. Qianfeng,可以被扫描到,测试是否可以访问到 redis 集群,在 service 中加入一个方法。
@Autowired 进行注入即可,因为在配置中已经用 @bean 把它放到容器中
Private
JedisCluster
jedisCluster;
6、在 UserServicelmpl.java 中输入
@Override
public String
findRedis ()
{
jedisCluster.set ("haha", "kele") ;
return jedisCluster .get ("haha") ;
}
7、在 controller 中进行访问。
@RequestMapping("/ redis")
加一个访问路径
@ResponseBody
只返回字符串
public String
findRedis ()
{
Return
userService. findRedis() ;
调用 service 方法,进行返回
}
向集群中存了一个键值对,键叫 haha,值叫 kele,重新取一次,并且把取到的值进行返回。
7、controller 调用 service 时,应该最终返回 kele,说明可以正常访问这个集群。进行启动,访问 localhost:8080/redis。可以看到 kele。这就是在 springboot 中访问集群的方法。