开发者学堂课程【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: 7550,192.168.25.128: 7551,192.168.25.128: 7552,192.168.25.128: 7553,192.168.25.128: 7554,192.168.25.128: 7555
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 地址和端口号
PrivateStringredisNodes ;
@Bean 创建对象,注入到容器中
public JedisCluster getJedisCluster ()
{
String[ ]redi snodesredisNodes . split ( ‘’,’’)
Set<HostAndPort>nodes=new HashSet<> ()创建所有 redis 节点的集合
for (String node: redisnodes) {
String[] arr=node . split (":") ;IP 地址和端口号之间是冒号连接的,再切割一次
HostAndPorthostAndPort=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 把它放到容器中
PrivateJedisClusterjedisCluster;
6、在 UserServicelmpl.java 中输入
@Override
public StringfindRedis () {
jedisCluster.set ("haha", "kele") ;
return jedisCluster .get ("haha") ;
}
7、在 controller 中进行访问。
@RequestMapping("/ redis")加一个访问路径
@ResponseBody只返回字符串
public StringfindRedis ()
{
Return userService. findRedis() ;调用 service 方法,进行返回
}
向集群中存了一个键值对,键叫 haha,值叫 kele,重新取一次,并且把取到的值进行返回。
7、controller 调用 service 时,应该最终返回 kele,说明可以正常访问这个集群。进行启动,访问 localhost:8080/redis。可以看到 kele。这就是在 springboot 中访问集群的方法。
