Redis Key过期监听的配置详解

来自:网络
时间:2024-08-28
阅读:
免费资源网 - https://freexyz.cn/

默认情况下在Windows系统中双击redis-server.exe用的是内置的配置文件

如果希望用这两个配置文件

Redis Key过期监听的配置详解

  • redis.windows.conf:这是用于在Windows上运行Redis服务器的标准配置文件。可以使用这个文件通过命令行启动Redis服务器。
  • redis.windows-service.conf:这是专门为在Windows服务中运行Redis设计的配置文件。可以使用这个文件将Redis作为Windows服务来运行。

Redis Key过期监听的配置详解

Window安装Redis为服务并设置开机自启   

在redis安装目录下管理员运行cmd  

redis-server --service-install redis.windows.conf --service-name redis 
net start redis //开机自启

修改redis的配置文件

Redis Key过期监听的配置详解

@Configuration
public class RedisConfig2 {
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                            MessageListenerAdapter listenerAdapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        // 订阅键过期事件
        container.addMessageListener(listenerAdapter, new ChannelTopic("__keyevent@0__:expired"));
        return container;
    }
 
    @Bean
    MessageListenerAdapter listenerAdapter(RedisKeyExpiredListener listener) {
        return new MessageListenerAdapter(listener);
    }
}
@Component
public class RedisKeyExpiredListener implements MessageListener {
 
    @Autowired
    private ITReportTimesService tReportTimesService;
 
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiredKey = message.toString();
        if (expiredKey.startsWith("sleep:decibels:")) {//只处理该key过期删除时间
            Long userId = Long.valueOf(expiredKey.split(":")[2]);
            // 处理非正常关机导致的睡眠结束逻辑
            handleUnexpectedShutdown(userId);
        }
    }
 
    private void handleUnexpectedShutdown(Long userId) {
        // 处理睡眠监测结束逻辑,例如记录结束时间
        System.out.println("监测到了@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
        //要处理的逻辑.......
    }
}
 @Autowired
    private RedisTemplate  redisTemplate;
 
    @GetMapping("/sleepTimes")//监测时候每多少分钟调用一次
    public AjaxResult sleepTimes(){
        LoginUser loginUser = getLoginUser();
        Long userId = loginUser.getUserId();
        // 往redis中记录,延时30秒,通过Redis key过期监听判断用户是否非正常关机
        String redisKey = "sleep:decibels:" + userId;
        //第一次会创建key和value  第二次调用会更新(覆盖相同key)key和value
        redisTemplate.opsForValue().set(redisKey, "I am active", 60, TimeUnit.SECONDS);
        System.out.println("sleepTimes");
        return success();
    }
免费资源网 - https://freexyz.cn/
返回顶部
顶部