• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Redis Key过期回调功能

武飞扬头像
一小民
帮助5


前言

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的数据被淘汰策略淘汰时,尽管时间没有过期,但是也会触发事件。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhgkhb
系列文章
更多 icon
同类精品
更多 icon
继续加载