Redis失效key监听

By gavin

pom 采用 spring 自带的 data-redis

<pre class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
    <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
    <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-data-redis<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>

初始化监听容器

<pre class="hljs java"><span class="hljs-meta">@Configuration</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> </span><span class="hljs-class"><span class="hljs-title">RedisListenerConfig</span> </span>{
    <span class="hljs-meta">@Bean</span>
    <span class="hljs-function">RedisMessageListenerContainer </span><span class="hljs-function"><span class="hljs-title">container</span></span><span class="hljs-function"><span class="hljs-params">(RedisConnectionFactory connectionFactory)</span> </span>{
        RedisMessageListenerContainer container = <span class="hljs-keyword">new</span> RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        <span class="hljs-keyword">return</span> container;
    }
}

消息到达后,开启监听业务,处理相关监听数据

<pre class="hljs java"><span class="hljs-meta">@Slf</span>4j
<span class="hljs-meta">@Component</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> </span><span class="hljs-class"><span class="hljs-title">RedisKeyExpirationListener</span> </span><span class="hljs-class"><span class="hljs-keyword">extends</span> </span><span class="hljs-class"><span class="hljs-title">KeyExpirationEventMessageListener</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">public</span> </span><span class="hljs-function"><span class="hljs-title">RedisKeyExpirationListener</span></span><span class="hljs-function"><span class="hljs-params">(RedisMessageListenerContainer listenerContainer)</span> </span>{
        <span class="hljs-keyword">super</span>(listenerContainer);
    }

    <span class="hljs-meta">@Autowired</span>
    <span class="hljs-keyword">private</span> OrderService orderService;

    <span class="hljs-meta">@Override</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> </span><span class="hljs-function"><span class="hljs-title">onMessage</span></span><span class="hljs-function"><span class="hljs-params">(Message message</span></span><span class="hljs-function"><span class="hljs-params">, <span class="hljs-keyword">byte</span></span></span><span class="hljs-function"><span class="hljs-params">[] pattern)</span> </span>{
        <em>log</em>.info(<span class="hljs-string">"onPMessageinfo</span><span class="hljs-string">开始监听</span><span class="hljs-string">:{}"</span>, <span class="hljs-string">"pattern = ["</span> + pattern + <span class="hljs-string">"],  message = ["</span> + message + <span class="hljs-string">"]"</span>);
        <span class="hljs-comment">//</span><span class="hljs-comment">收到消息</span><span class="hljs-comment"> key</span><span class="hljs-comment">的键值,处理过期提醒</span>
        String orderId = message.toString();
        //根据key键值判断实现自己的业务逻辑     

        <em>log</em>.debug(<span class="hljs-string">"onPMessageinfo</span><span class="hljs-string">结束监听监听</span><span class="hljs-string">:{}"</span>, <span class="hljs-string">"pattern = ["</span> + pattern + <span class="hljs-string">"],  message = ["</span> + message + <span class="hljs-string">"]"</span>);
    }
}
<span style="color: #ff0000;">注意:若应用部署在多台服务器,监听的时候需要指定一台服务器来实现对应的业务逻辑处理,否则会执行多次</span>