目录
一、springboot整合单节点redis
1、添加依赖
2、添加配置application.yml配置
3、添加配置类
4、工具类
5、发布与订阅
5.1 添加配置对象
5.2 定义消息接收类
5.3 使用:在redisUtils工具类中添加发布消息的方法
5.4 发布消息
二、哨兵-主备读写分离
1.添加依赖
2、配置yml
3、添加配置文件
4、工具类同上
三、集群
1、添加Spring Boot和Redis依赖
2、修改配置文件
3、配置类(创建RedisTemplate实例)
4、工具类同上
5、使用postman调接口测试Redis集群
一、springboot整合单节点redis
1、添加依赖
org.springframework.boot spring-boot-starter-data-redis 2.7.0
2、添加配置application.yml配置
spring: redis: database: 0 host: 127.0.0.1 port: 6379 password: lettuce: pool: # 连接池中的最大空闲连接 默认8 max-idle: 8 # 连接池中的最小空闲连接 默认0 min-idle: 0 # 连接池最大连接数 默认8 ,负数表示没有限制 max-active: 8 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1 max-wait: -1 timeout: 30000
3、添加配置类
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;import javax.annotation.Resource;@Configurationpublic class RedisConfiguration { @Resource private RedisConnectionFactory redisConnectionFactory; @Bean public RedisTemplate redisTemplate() { RedisTemplate redisTemplate= new RedisTemplate<>(); // 可根据需要添加序列化器 // template.setDefaultSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); // key采用String的序列化方式 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setConnectionFactory(redisConnectionFactory); return redisTemplate; }}
4、工具类
import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.ObjectMapper;import lombok.extern.log4j.Log4j2;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.ZSetOperations;import org.springframework.stereotype.Component;import org.springframework.util.CollectionUtils;import org.springframework.util.StringUtils;import java.io.IOException;import java.util.Collection;import java.util.List;import java.util.Map;import java.util.Set;import java.util.concurrent.TimeUnit;@Component@Log4j2public final class RedisUtil { @Autowired private RedisTemplate redisTemplate; public Map obtainMap(String jsonString) { ObjectMapper mapper = new ObjectMapper(); Map map = null; try { map = mapper.readValue(jsonString, new TypeReference
5、发布与订阅
5.1 添加配置对象
@Bean RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory, MessageListenerAdapter messageListenerAdapter) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); // 监听所有库的key过期事件 container.setConnectionFactory(connectionFactory); // 可以添加多个 messageListener,配置不同的通道 container.addMessageListener(messageListenerAdapter, new PatternTopic("user")); return container; } @Bean MessageListenerAdapter listenerAdapter(RedisMessageListener receiver) { return new MessageListenerAdapter(receiver, "onMessage"); }
其中的new PatternTopic("user")中的 user 就是通道名。
5.2 定义消息接收类
@Slf4j@Componentpublic class RedisMessageListener implements MessageListener { @Override public void onMessage(Message message, byte[] pattern) { // 接收的topic log.info("channel:" + new String(pattern)); // 消息的POJO log.info("message:" + message.toString()); }}
5.3 使用:在redisUtils工具类中添加发布消息的方法
public boolean convertAndSend(String channel, Object message) { if (StringUtils.isEmpty(channel)) { return false; } try { redisTemplate.convertAndSend(channel, message);// log.info("发送消息成功,channel:{},message:{}", channel, message); return true; } catch (Exception e) {// log.info("发送消息失败,channel:{},message:{}", channel, message); e.printStackTrace(); } return false; }
5.4 发布消息
public void get1(){ String message = "Hello World!"; // 发送消息 redisUtils.convertAndSend("user", message);}
只要发布消息到通道中,有监听器的存在,就会跑到消息接收类RedisMessageListener的onMessage方法中。
二、哨兵-主备读写分离
1.添加依赖
org.springframework.boot spring-boot-starter-data-redis
2、配置yml
spring: redis: client-type: LETTUCE sentinel: master: mymaster nodes: 192.168.109.134:26380,192.168.109.134:26381,192.168.109.134:26382 password:
3、添加配置文件
@Configurationpublic class RedisConfig { @Autowired private Environment environmet; @Bean("lettuceConnectionFactory") public RedisConnectionFactory lettuceConnectionFactory() { String master = environmet.getProperty("spring.redis.sentinel.master"); Set nodes = StringUtils.commaDelimitedListToSet(environmet.getProperty("spring.redis.sentinel.nodes")); String password = environmet.getProperty("spring.redis.sentinel.password"); RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration(master, nodes); sentinelConfig.setPassword(RedisPassword.of(password)); return new LettuceConnectionFactory(sentinelConfig); } @Bean public RedisTemplate redisTemplate(@Qualifier("lettuceConnectionFactory") RedisConnectionFactory factory) { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(factory); return redisTemplate; } }
4、工具类同上
三、集群
1、添加Spring Boot和Redis依赖
org.springframework.boot spring-boot-starter-data-redis
2、修改配置文件
spring: redis: database: 0 cluster: nodes: 192.168.177.128:6379,192.168.177.128:6380,192.168.177.128:6381,192.168.177.128:6382,192.168.177.128:6383,192.168.177.128:6384 password: lettuce: pool: # 连接池中的最大空闲连接 默认8 max-idle: 8 # 连接池中的最小空闲连接 默认0 min-idle: 0 # 连接池最大连接数 默认8 ,负数表示没有限制 max-active: 8 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1 max-wait: -1 timeout: 30000
3、配置类(创建RedisTemplate实例)
@Configurationpublic class RedisConfig { @Autowired private RedisConnectionFactory redisConnectionFactory; @Bean public RedisTemplate redisTemplate() { RedisTemplate redisTemplate= new RedisTemplate<>(); // 可根据需要添加序列化器 // template.setDefaultSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); // key采用String的序列化方式 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setConnectionFactory(redisConnectionFactory); return template; }}
4、工具类同上
5、使用postman调接口测试Redis集群
@Slf4j@RestControllerpublic class TestController { @Resource private RedisUtil redisUtil; @GetMapping("/set") public String set(){ redisUtil.set("key1", "value"); return "success"; } @GetMapping("/get") public String get(){ Object result = redisUtil.get("key1"); return result.toString(); }}