⚡热点管理模块⚡
创始人
2024-03-30 00:00:47
0

热点管理模块概念

  • 如果一个文件在连续一段时间内没有访问到,则该文件是一个非热点文件,否则位热点文件。
  • 在服务上上有两个目录,一个目录是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//非热点文件返回falsebool 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 arry;                                                                                                                                                    fu.GetPathInDir(arry);for(int i=0;iGetOneByRealPath(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;}                                        

相关内容

热门资讯

中央广电总台副台长王晓真,黑龙... 据央视新闻报道,12月28日,中央广播电视总台《2026年春节联欢晚会》分会场发布。黑龙江哈尔滨、浙...
聚焦全国财政工作会议丨明年财政... (央视财经《经济信息联播》)明年是“十五五”规划的开局之年,财政政策将聚焦哪些关键领域精准发力? ...
原创 中... 12月26日,中国对美国实施了一次重磅反制,针对美国政府前不久批准的111亿美元对台军售,中方决定出...
徐杰11分王少杰遭驱逐 张宁缺... [搜狐体育战报]北京时间12月28日消息,2025-26赛季CBA常规赛继续第7轮角逐。王少杰第三节...
《今日说法》主持人李晓东买茶叶... 12月28日,《今日说法》栏目主持人李晓东发布视频称,此前“被骗1000元买茶叶”事件迎来新进展:该...
3-0领先终于能休息了!莫德里... 在意甲第17轮的一场焦点战中,AC米兰迎战维罗纳。比赛进行到第70分钟时,AC米兰在3-0领先的情况...
原创 数... 星链卫星接连失控坠落背后,美国太空霸权现裂痕?反观中国,悄然布下反超棋局,六战六捷消息一出,美国立马...
“墨色无变化”,故宫出借米芾《... 12月28日,江西省博物馆发布声明回应近日文学爱好者的质疑: 近日,有观众质疑我馆“山谷雅集——黄庭...
原创 彻... 近期,中日关系因为日本首相高市早苗的错误涉台言论,跌到了谷底。然而在多重施压下,高市早苗仍然拒绝撤回...