Redis Key过期监听配置

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

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

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

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

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

redis-server --service-install redis.windows.conf --service-name redis 

net start redis //开机自启

修改redis的配置文件

@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();
    }

相关推荐

  1. redis集群模糊获取缓存redisKey

    2024-06-11 04:34:03       47 阅读
  2. 监听 Redis key 过期事件无效的问题

    2024-06-11 04:34:03       18 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 04:34:03       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 04:34:03       5 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 04:34:03       4 阅读
  4. Python语言-面向对象

    2024-06-11 04:34:03       6 阅读

热门阅读

  1. Oracle 日志挖掘

    2024-06-11 04:34:03       16 阅读
  2. 13_1 Linux 邮件服务与NTP时间服务

    2024-06-11 04:34:03       17 阅读
  3. C++线程

    2024-06-11 04:34:03       15 阅读
  4. HOT100与剑指Offer

    2024-06-11 04:34:03       20 阅读
  5. 游戏心理学Day10

    2024-06-11 04:34:03       14 阅读
  6. 使用EFCore和Linq查询语句封装复杂的查询结果

    2024-06-11 04:34:03       19 阅读
  7. Python爬虫实现“自动重试”机制的方法(1)

    2024-06-11 04:34:03       13 阅读
  8. OpenAI 发布的 GPT-4o是什么,有什么功能?

    2024-06-11 04:34:03       18 阅读