默认情况下在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(); }