当前位置: 首页 > wzjs >正文

建站公司新闻资讯导航类网站源码

建站公司新闻资讯,导航类网站源码,天津高端模板建站,友点网站建设语言:golang 在抓取网站前,可能会多次读取文件中的cookie。频繁读取文件,性能不佳,故在go包中创建了一个map全局变量存储文件内容,只有键不存在时才去读取文件。 因为对go并不熟悉,才发现,不同请…

语言:golang

在抓取网站前,可能会多次读取文件中的cookie。频繁读取文件,性能不佳,故在go包中创建了一个map全局变量存储文件内容,只有键不存在时才去读取文件。
因为对go并不熟悉,才发现,不同请求读取到的是同一个变量(地址)。对于性能来说,这其实是好的。但出现一个问题:文件更新后,该变量的值依然是文件更新之前的内容,需要重新运行go包,而cookie随时可能失效而去更新,频繁重启这显然不现实。

解决方法
依旧采用map存储文件内容,但map的值为:1、文件的内容,2、文件的修改时间。
每次读取加读锁,并检查实际文件的修改时间,若与map中的值一致,则直接返回map中文件内容。
若不一致,则加写锁,再次检查修改时间,防止获取到写锁之前,文件已经修改。随后读取文件,获取文件中的内容,并更新内容和当前时间到map中。

type cacheEntry struct {content []stringmodTime time.Time
}var (fileCache = make(map[string]cacheEntry)mu        sync.RWMutexgroup     singleflight.Group
)func getFileModTime(path string) (time.Time, error) {fileInfo, err := os.Stat(path)if err != nil {return time.Time{}, err}return fileInfo.ModTime(), nil
}
func GetFile(file string) string {//合并请求result, err, _ := group.Do(file, func() (interface{}, error) {mu.RLock()entry, ok := fileCache[file]mu.RUnlock()path := GetFullPath(file)if ok {currentModTime, err := getFileModTime(path)if err != nil {return nil, err}if currentModTime.Equal(entry.modTime) {return entry.content, nil // 缓存有效}}mu.Lock()defer mu.Unlock()//再次检查,避免在获取到写锁的前一刻已经更新entry, ok = fileCache[file]if ok {currentModTime, err := getFileModTime(path)if err != nil {return nil, err}if currentModTime.Equal(entry.modTime) {return entry.content, nil // 缓存有效}}//读取文件并缓存content, err := os.ReadFile(path)if err != nil || len(content) == 0 {return nil, errors.New("文件不存在或为空")}//可选,按行分割内容lines := strings.Split(string(content), "\n")var branchContent []stringfor _, line := range lines {if line != "" {line = strings.TrimSpace(line)branchContent = append(branchContent, line)}}fileCache[file] = cacheEntry{content: branchContent,modTime: time.Now(),}return branchContent, nil})
}
http://www.dtcms.com/wzjs/550396.html

相关文章:

  • 长沙手机网站建设工程装修
  • 建设物流网站的规划河东网站建设公司
  • 创意上海专业网站建设学校网站怎么做的好
  • 怎么增加网站关键词库做二维码签到的网站
  • 阿里云建设网站的流程网站建设 岗位职责 智联
  • 网站建设需要懂什么软件推广引流最快的方法
  • 如何免费建立自己网站程序员网站需要多少钱
  • 做网站报价明细表厚街h5网站建设
  • 上海知名的网站公司企业整站推广
  • 网站诊断表百度app常用网址在哪里
  • 2015网站备案没下来什么网站流量高
  • 网站策划书籍推荐个人电脑做服务器网站
  • 如何做网站免费教程电子商务网站建设题库
  • 小语种网站建设要点商丘网站制作费用
  • 工商年检在哪个网站做wordpress配置外网映射
  • 哈尔滨网站排名公司苏州网页设计培训
  • 如何给客户做网站方案源码之家app
  • 凡科建站怎么建网站wordpress 宽屏
  • 做网站的框架结构湛江论坛建站模板
  • 极简风格网站介绍广东seo外包服务
  • 长沙企业做网站电子商务网站案例分析
  • 优化网站建设人员组成黄江镇网站仿做
  • 微信营销手机网站模板平台公司331名单
  • 行业信息网站建设方案免费查企业信息的平台
  • 南阳专业网站建设价格wamp搭建wordpress
  • 滨州网站建设哪家专业眉山注册公司流程和费用
  • 优秀学校网站模板韩都衣舍网站建设
  • html5网站建设加盟新浪微博 搭建网站
  • 海门市住房和城乡建设局网站如何登录百度站长平台
  • 随州网站建设学习网站开发需要文章写的好吗