SpringBoot 2.2.1.RELEASE
를 사용하여 프로젝트 환경을 구축하고 pom.xml
에 직접 redis 종속성을 추가합니다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2.2.1.RELEASE
来搭建项目环境,直接在pom.xml
中添加 redis 依赖spring: redis: host: 127.0.0.1 port: 6379 password:
如果我们的 redis 是默认配置,则可以不额外添加任何配置;也可以直接在application.yml
配置中,如下
@Service public class PubSubBean { @Autowired private StringRedisTemplate redisTemplate; public void publish(String key, String value) { redisTemplate.execute(new RedisCallback<Object>() { @Override public Object doInRedis(RedisConnection redisConnection) throws DataAccessException { redisConnection.publish(key.getBytes(), value.getBytes()); return null; } }); } }
redis 的发布/订阅,主要就是利用两个命令publish/subscribe
; 在 SpringBoot 中使用发布订阅模式比较简单,借助 RedisTemplate 可以很方便的实现
public void subscribe(MessageListener messageListener, String key) { redisTemplate.execute(new RedisCallback<Object>() { @Override public Object doInRedis(RedisConnection redisConnection) throws DataAccessException { redisConnection.subscribe(messageListener, key.getBytes()); return null; } }); }
消息订阅这里,需要注意我们借助org.springframework.data.redis.connection.MessageListener
来实现消费逻辑
@RestController @RequestMapping(path = "rest") public class DemoRest { @Autowired private PubSubBean pubSubBean; // 发布消息 @GetMapping(path = "pub") public String pubTest(String key, String value) { pubSubBean.publish(key, value); return "over"; } // 新增消费者 @GetMapping(path = "sub") public String subscribe(String key, String uuid) { pubSubBean.subscribe(new MessageListener() { @Override public void onMessage(Message message, byte[] bytes) { System.out.println(uuid + " ==> msg:" + message); } }, key); return "over"; } }
写一个简单的测试 case,来验证一下上面的发布订阅,顺带理解一下这个MessageListener
redis가 기본 구성인 경우 추가 구성을 추가할 필요가 없습니다. 다음과 같이 application.yml
에서 직접 구성할 수도 있습니다.
notify-keyspace-events Ex
publish/subscribe
두 가지 명령을 사용합니다. SpringBoot에서 게시 및 구독 모드를 사용하는 것은 상대적으로 간단하며 다음과 같이 쉽게 구현할 수 있습니다. RedisTemplatesubscribe __keyevent@0__:expired
org.springframework.data.redis를 사용합니다. Connection.MessageListener
를 사용하여 소비 로직을 구현합니다rrreee
MessageListener; 두 개의 REST 인터페이스를 제공하는 간단한 WEB 프로젝트를 만듭니다<p>rrreee</p> 먼저 두 개의 소비자를 생성한 다음 메시지를 보낼 때 둘 다 수신되고 메시지를 보낼 때 세 개가 모두 수신됩니다. received<ul class=" list-paddingleft-2">
<li>3. 사용 지침 및 적용 시나리오 <p></p>Redis 게시 및 구독은 상대적으로 간단한 시나리오에만 적합합니다. 위 지침에서 볼 수 있듯이 이는 1에서 N까지 지원하는 간단한 게시 및 구독 모델입니다. 전송된 것은 온라인인 소비자만이 얻을 수 있고(온라인이 아닌 사람은 안타깝다고 할 수밖에 없음), 레디스의 경우 소비자가 소비할 수 있는지 여부는 끝난다. 일반적으로 상관하지 않습니다. </li>
<li> 핵심 사항: <p></p>
</li>
</ul>온라인 소비자만 메시지를 받을 수 있습니다. <p></p>
<p><strong> 소비자는 메시지를 한 번만 받을 수 있습니다. </strong></p>
<p></p>다음 질문은 어떤 시나리오에서 Redis를 사용할 수 있느냐는 것입니다. 게시와 구독은 어떻습니까? <p><strong></strong>메모리 기반 캐시 무효화</p>
<p></p>레이드 + 메모리를 보조 캐시로 사용하는 것은 비교적 일반적인 방법이라고 할 수 있습니다. 메모리 기반 캐시의 도움으로 시스템 부하를 효과적으로 늘릴 수 있지만 문제도 있습니다. 캐시된 데이터의 메모리 무효화는 특히 애플리케이션이 여러 서버에 배포될 때 문제가 됩니다. 동시에 모든 서버의 특정 메모리 캐시를 무효화하려면 redis 게시/구독을 사용하는 것이 더 좋습니다<p></p>
<p> SpringCloud Config 구성 새로 고침 <strong></strong></p>SpringCloud Config를 구성 센터로 사용하는 친구는 이러한 문제에 자주 직면할 수 있습니다. 구성 수정 후 동적 새로 고침이 문제입니다(물론 공식 지원은 mq를 통해 버스를 통해 동기화하는 것이며, 또한 )<p></p>redis 게시/구독의 도움으로 구성을 동적으로 새로 고치는 것도 좋은 대안입니다(특정 구현 데모는 나중에 제공될 예정입니다. 관심이 있으시면 계속 따르세요). Yihuihui 블로그)<p></p>
<p>redis 키 만료 구독</p>🎜 🎜redis를 캐싱에 사용할 때 일반적으로 만료 시간을 설정합니다. Redis는 기본적으로 활성화되지 않는 만료 이벤트를 제공합니다. 구독을 통해🎜🎜구성을 수정하고 키 만료 이벤트를 활성화하세요🎜rrreee🎜redis를 다시 시작한 후 무효화 이벤트를 구독하세요🎜rrreee
위 내용은 Redis 게시 및 구독 방법을 사용하여 간단한 메시징 시스템을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!