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