⚡热点管理模块⚡

news2025/7/9 0:17:10

热点管理模块概念

  • 如果一个文件在连续一段时间内没有访问到,则该文件是一个非热点文件,否则位热点文件。
  • 在服务上上有两个目录,一个目录是backdir存储的是热点文件,一个目录是packdir存储的是非热点文件
  • 热点管理模块每隔一段时间都会遍历backdir下的热点文件,如果一个文件在连续一段时间内没有访问到,则说明该文件是一个非热点文件,则热点管理模块会对该文件进行压缩到packdir目录下,删除backdir的热点文件,节省磁盘空间.

实现思路  

成员变量     

  • 热点管理模块需要包含热点时间,热点文件的目录backdir,非热点文件目录packdir,压缩文件后缀等信息  ,这些信息可以从配置文件管理模块中获得。   

成员函数run实现思路

  • 对服务器上的backdir目录下的文件进行检测,哪些文件长时间没有被访问, 则认为为非热点文件。      
  • 如果在热点时间内没有访问过该文件,则认为是非热点文件,压缩原文件,并将压缩文件放入到packdir目录下删除原文件,并利用文件信息管理模块将该文件信息中的压缩标志设置为true,当客户端要下载该文件时,可以直接通过压缩标志判断是否去哪一个目录获取文件数据。
#pragma once                                                                                                                                                                              
  #include"FileInfoManger.hpp"
 namespace sjp{
    class HotSpotManger{
      private:                                        
        int hot_time;               
        std::string back_dir;//压缩文件目录;
        std::string pack_dir;//备份文件目录;
        std::string pack_file_suffix;
        static std::mutex lock;         
        static HotSpotManger* instant;                                             
        HotSpotManger(){                
          hot_time=sjp::Config::GetInstant()->GetHotTime();
          back_dir=sjp::Config::GetInstant()->GetBackDir();
          pack_dir=sjp::Config::GetInstant()->GetPackDir();       
          pack_file_suffix=sjp::Config::GetInstant()->GetPackFileSuffix();
        }  
                                                       
        HotSpotManger(HotSpotManger&)=delete;
      public:
        //热点文件返回true,非热点文件返沪false 
        static HotSpotManger* GetInstant(){
          if(instant==nullptr){
            lock.lock();                               
            if(instant==nullptr){  
              instant=new HotSpotManger();
            }
            lock.unlock();
          }
          return instant;
        }
  
  
        //热点文件返回true
        //非热点文件返回false
        bool JudgeHotspotFile(std::string& backpath){
          sjp::FileUtil fu(backpath);
          time_t atime=fu.GetFileAccessTime();
          time_t curtime=time(NULL);
          if(curtime-atime>hot_time){
            return false;
          }
          return true;
        }
  
        void Run(){
          sjp::FileUtil fu(back_dir.c_str());
          if(!fu.Exist())
          {
             fu.CreateDir(back_dir); 
          }
  
          while(true){
          std::vector<std::string> arry;                                                                                                                                                    
          fu.GetPathInDir(arry);
          for(int i=0;i<arry.size();i++){
            //获取文件信息
            sjp::FileInfo fileinfo;
            if(!sjp::FileInfoManger::GetInstant()->GetOneByRealPath(arry[i],fileinfo))
           {
              //存储文件中没有该文件信息
              fileinfo.AddFileInfo(arry[i]);
              sjp::FileInfoManger::GetInstant()->Insert(fileinfo);
            }
            if(!JudgeHotspotFile(fileinfo.back_path)){
              /*1.非热点文件进行压缩
               *2.删除源文件
                3.修改文件列表中的信息
               */
              sjp::FileUtil fu(arry[i]);
              std::string packfilepath=pack_dir+fu.GetFilename()+pack_file_suffix; 
              fu.PackFile(packfilepath);
              fu.Remove();
              fileinfo.pack_sign=true; 
              sjp::FileInfoManger::GetInstant()->update(fileinfo);
            }
          }
          sjp::FileInfoManger::GetInstant()->Storage();
          usleep(1000);
        }
        }
    };
  
    sjp::HotSpotManger* HotSpotManger::instant=nullptr;
    std::mutex HotSpotManger::lock;
  }                                        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROHM | 开发出隔离型DC-DC转换器“BD7Fx05EFJ-C”

全球知名半导体制造商ROHM&#xff08;总部位于日本京都市&#xff09;开发出两款隔离型反激式*1DC-DC转换器“BD7F105EFJ-C”和“BD7F205EFJ-C”&#xff0c;新产品非常适用于xEV&#xff08;电动汽车&#xff09;的主驱逆变器、车载充电器&#xff08;以下简称“OBC”&#x…

Unity Addressables资源管理 设置远程加载资源

1.添加Group 点击 PackedAssets 可添加默认设置的组 Blank 则是无设置的 修改名字并添加了一张图片 图片挂在WindowImage预制体上 2.设置模式 Group可选择打包模式&#xff1a; 本地&#xff0c;远程&#xff0c;自定义 设置了后这个包会打到不同的路径&#xff0c;加载也只…

环形石子合并(区间DP)

将 n 堆石子绕圆形操场排放&#xff0c;现要将石子有序地合并成一堆。 规定每次只能选相邻的两堆合并成新的一堆&#xff0c;并将新的一堆的石子数记做该次合并的得分。 请编写一个程序&#xff0c;读入堆数 nn 及每堆的石子数&#xff0c;并进行如下计算&#xff1a; 选择一…

代码随想录刷题记录day39 完全背包+零钱兑换 II+组合总和 Ⅳ

代码随想录刷题记录day39 完全背包零钱兑换 II组合总和 Ⅳ 参考&#xff1a;代码随想录 完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09…

《自己动手写CPU》学习记录(6)——第5章/Part 2

目录 引言 致谢 指令说明 逻辑指令 and、or、xor、nor andi、xori lui 移位指令 sll、sllv、sra、srav、srl、srlv 空指令 nop、ssnop、sync、pref 指令实现 宏定义添加 指令译码模块修改 指令执行模块修改 功能验证 逻辑运算 验证代码 仿真波形 移位运算…

CMake中aux_source_directory的使用

CMake中的aux_source_directory命令用于查找目录中的所有源文件&#xff0c;其格式如下&#xff1a; aux_source_directory(<dir> <variable>) 收集指定目录中所有源文件的名称&#xff0c;并将列表(list)存储在提供的<variable>中。该命令旨在由使用显式模…

b2b2c 电子商务平台涉及的技术、运营方案

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案&#xff1f;以下是我结合公司的产品做的总结&#xff0c;希望可以帮助到大家&#xff01; 搜索体验小程序&#xff1a;海哇 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买…

javaee之黑马旅游网3

下面来说一个问题&#xff0c;就是对于一张表的操作&#xff0c;涉及到了很多的servlet页面 比如对于一个user表&#xff0c;里面有很多的相关的servlet页面 如果是这样一种情况&#xff0c;那么user表涉及到七八个页面&#xff0c;category表又涉及到七八个页面&#xff0c;那…

初级软件测试工程师工资(薪资待遇)一般是多少?

那接下来&#xff0c;我们要讲的是从软件测试这个岗位与职责&#xff0c;以及对应的标准薪资范畴 到底软件测试它不同的层次它要负责一些什么样的事情&#xff0c;对于软件测试这个岗位呢&#xff0c;第一个&#xff0c;它要求的东西确实非常的多&#xff0c;比如说你要懂数据…

SpringBoot - WebSocket的使用和聊天室练习

SpringBoot - WebSocket的使用和聊天室练习前言一. SpringBoot整合WebSocket1.1 &#xff08;插曲&#xff09;SpringCloud网关服务接入WebSocket启动错误二. 前端代码监听2.1 模拟进入/离开聊天室2.2 模拟聊天前言 近期准备在我的个人云直播项目中&#xff0c;编写弹幕模块。…

超详细的 pytest 教程(一)使用入门篇

前言 pytest到目前为止还没有翻译的比较好全面的使用文档&#xff0c;很多英文不太好的小伙伴&#xff0c;在学习时看英文文档还是很吃力。本来去年就计划写pytest详细的使用文档的&#xff0c;由于时间关系一直搁置&#xff0c;直到今天才开始写。本文是第一篇&#xff0c;主…

基于jsp+mysql+ssm校园在线投票系统-计算机毕业设计

项目介绍 校园在线投票系统主要包括系统用户管理模块、新闻公告管理模块、投票信息管理、班级信息管理、登录模块、和退出模块等多个模块。系统采用了jsp的mvc框架,SSM(springMvcspringMybatis)框架进行开发,本系统是独立的运行&#xff0c;不依附于其他系统&#xff0c;可移植…

Apipost下载安装和功能详解

一、ApiPost简介 ApiPost PostMan Swagger Mock Jmeter 后端、前端、测试同时在线编辑&#xff0c;同时在线协作&#xff0c;内容实时同步 1.官网地址&#xff1a;https://www.apipost.cn/ 2.官网支持客户端下载及web版在线调试&#xff0c;可根据自己的需求选择适合自己的…

@Controller和@RestController的区别?

本文为joshua317原创文章,转载请注明&#xff1a;转载自joshua317博客 Controller和RestController的区别&#xff1f; - joshua317的博客 Controller和RestController的区别&#xff1f; 在springboot开发中控制层使用注解Controller时&#xff0c;加有GetMapping(PostMappi…

网络开关量输入转4G模块钡铼技术S274

网络开关量输入转4G模块钡铼技术S274支持4路DIN4路DO1路RS485&#xff0c;本机设备自带的继电器 DO 寄存器地址属于保持线圈&#xff0c;地址 0-3&#xff0c;服务器主站发送报文格式&#xff1a; 接收设备返回报文格式&#xff1a; 示例&#xff1a;读取2 个DO状态&#xff…

FS5175AE的PCB布局设计建议

FS5175AE的PCB布局设计建议-基础篇 开关电源的一个常见问题是“不稳定”的开关波形。有时,波形抖动很明显,可以听到从磁性元件发出噪声。如果问题与印刷电路板(PCB)布局有关,则很难确定原因。 EMC也是很注重(PCB)布局,这就是为什么在开关电源设计的早期正确布局PCB至关重要的原…

React 学习笔记:事件处理

React 事件处理 React 采用 on 事件名的方式来绑定一个事件&#xff0c;注意&#xff0c;这里和原生的事件是有区别的&#xff0c;原生的事件全是小写 onclick , React 里的事件是驼峰 onClick 。并且 React 中若想阻止默认事件需要显示的调用 e.preventDefault&#xff0c;而…

智工教育:2023年安全工程师考试习题

答案在最后 1.依据中共中央国务院《关于推进安全生产领域改革发展的意见》&#xff0c;到( )年&#xff0c;实现安全生产治理体系和治理能力现代化&#xff0c;全民安全文明素质全面提升&#xff0c;安全生产保障能力显著增强&#xff0c;为实现中华民族伟大复兴的中国梦奠定稳…

Linux系统IO

文章目录Linux系统IOsysio简介sysio版本的copy示例代码代码说明函数讲解如何编译 运行系统IO与标准IO的区别示例代码函数讲解编译 运行&#xff1f;程序中的重定向代码示例代码说明函数讲解编译 运行&#xff1f;代码示例函数讲解编译 运行Linux系统IO sysio简介 所谓文件IO就…

全国青少年软件编程(Scratch)等级考试二级考试真题2022年6月——持续更新.....

电子学会202206Scratch二级真题及参考答案 1.角色初始位置如图所示&#xff0c;下面哪个选项能让角色移到舞台的左下角&#xff1f;&#xff08; &#xff09; A. B. C. D. 正确答案&#xff1a;C 答案解析&#xff1a; 舞台的左下角&#xff0c;坐标x为负数&#xff0c;…