安装redis就不写了,直接开启redis服务。
(1)去到我自己Mac 电脑的安装目录下 cd /usr/local/bin
(2)开启:redis-server
成功了。
SpringBoot中pom.xml文件添加redis的依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
配置redis的端口号,用户名和密码,最大连接数,redis服务器IP地址等等参数。
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0
写一个配置类,加上@Configuration注解让Spring容器管理它的生命周期和作用范围。
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
}
Controller:
@RequestMapping("/testRedis")
@ResponseBody
public String getUrl(String messages , String username){
// 连接频道,发送消息
stringRedisTemplate.convertAndSend("jojo_channel" , messages);
// 调用客户端,获取发送的聊天消息
String demo = RedisClient.returnMessage();
return "客户端接收到的的消息:"+demo;
}
RedisClient 接收消息的客户端:
@Configuration
public class RedisClient {
public static String messages;
@Bean
MessageListenerAdapter messageListenerAdapter(){
return new MessageListenerAdapter((MessageListener) (message, pattern) -> {
System.out.println("接收到的信息: " + message.toString());
messages = message.toString();
returnMessage();
});
}
// 创建连接和监听频道
@Bean
RedisMessageListenerContainer redisContainer(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container
= new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(messageListenerAdapter(), topic());
return container;
}
// 设置要关注的频道
@Bean
ChannelTopic topic() {
return new ChannelTopic("jojo_channel");
}
// 自定义方法返回信息
public static String returnMessage(){
System.out.println("准备返回的信息:"+messages);
return messages;
}
}
用postman请求看看发布消息后订阅方是否能收到。