1、首先假设你有一台装好单机版redis的服务器,然后输入redis-cli命令,进入redis命令行:

2、然后输入PSUBSCRIBE __keyevent@0__:expired,会出现如下内容:

3、然后重新打开一个窗口输入redis-cli连接这个redis,然后输入setex test_key 3 test_value

4、切换回前一窗口,等待3秒后,画面应该是没变化的,因为我们还没有对key过期事件进行配置。

5、接着我们有两个选择,一个是找到redis.conf文件,修改其中的notify-keyspace-events ""为notify-keyspace-events "Ex",一个是在输入redis-cli之后输入命令CONFIG set notify-keyspace-events Ex

6、重复2到3两步,然后执行第4步,3秒后会出现如下内容:

7、这个就说明redis方面配置完成了,接下来改对我们的web项目进行改动了,这里在我们之前的“单redis服务器访问:singleRedis分支”的基础上进行改造

8、首先在RedisConfig中增加一个RedisMessageListenerContainer,如下:

    /**
     * key过期事件订阅需要
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory redisConnectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(redisConnectionFactory);
        return container;
    }

9、然后定义一个使用这个container的监听器:

@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {

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

    /**
     * 针对redis数据失效事件,进行数据处理
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        // 用户做自己的业务处理即可,注意message.toString()可以获取失效的key
        String expiredKey = message.toString();

        log.info("过期key:" + expiredKey);
    }
}

10、启动工程,然后我们再执行一遍第3步,等待3秒后就能在控制台看到打印的信息了。

完成。

有什么不清楚的可以参考github上的demo的singleRedis分支:

https://github.com/whol/springbootdemo

 

 

最后修改于 2019-05-10 12:20:13
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇