前言

Redis事件监听回调是一个非常好用的功能,可以用于定时完成某个特定功能,如:30分钟的支付有效期,24小时的vip体验,均可以通过Redis的key过期触发事件回调来完成。


一、开启Redis的过期回调功能

1.1 修改redis.conf文件

vim redis.conf

1.2 开启notify-keyspace-events Ex的配置
在这里插入图片描述
1.3 重启redis服务

### 连接redis客户端(redis-cli),使用shutwodn命令
./redis-cli
shutdown

### 重启redis服务
./redis-server redis.conf

二、在SpringBoot程序中配置监听器响应功能

2.1 引入依赖包

   		<!-- redis 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2.2 编写监听器实现回调功能

在写监听器前需要先编写一个配置类,将RedisMessageListenerContainer 类的实例手动注入容器
因为在写监听器的构造函数时,RedisMessageListenerContainer 实例无法自动注入,需要子编写配置类,注入容器中。
在这里插入图片描述
配置类代码如下(直接复制即可):

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;

@Configuration
public class RedisListenerConfig {

    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {

        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
}

监听器代码如下:

import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;

/**
 * Redis事件监听器
 */
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {


    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    /**
     * 重写omMessage方法,当Redis中的Key过期时会执行该方法
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        // 过期的key
        String expireKey = message.toString();
        // 根据key,执行自己需要实现的功能。
    }
}

总结

Redis的事件回调功能作用非常强大,能够解决非常多的限时任务。使用好该功能能够帮你解决非常多的问题。定制自己的解决方案只需要两步:
1.redis配置文件中开启事件监听功能。
2.定制自己的监听器,实现特定功能。
注意:当redis的数据被淘汰策略淘汰时,尽管时间没有过期,但是也会触发事件。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐