[转]beego cache
package beegoimport (errorsfmtstrconvsynctime)var (DefaultEvery int = 60 // 1 minute)type BeeItem struct {val interface{}Lastaccess time.Timeexpired int}func (itm *BeeItem) Access() interface{} {itm.Lastaccess = time.Now()return itm.val}ty
package beego import ( "errors" "fmt" "strconv" "sync" "time" ) var ( DefaultEvery int = 60 // 1 minute ) type BeeItem struct { val interface{} Lastaccess time.Time expired int } func (itm *BeeItem) Access() interface{} { itm.Lastaccess = time.Now() return itm.val } type BeeCache struct { lock sync.RWMutex dur time.Duration items map[string]*BeeItem Every int // Run an expiration check Every seconds } // NewDefaultCache returns a new FileCache with sane defaults. func NewBeeCache() *BeeCache { cache := BeeCache{dur: time.Since(time.Now()), Every: DefaultEvery} return &cache } func (bc *BeeCache) Get(name string) interface{} { bc.lock.RLock() defer bc.lock.RUnlock() itm, ok := bc.items[name] if !ok { return nil } return itm.Access() } func (bc *BeeCache) Put(name string, value interface{}, expired int) error { bc.lock.Lock() defer bc.lock.Unlock() t := BeeItem{val: value, Lastaccess: time.Now(), expired: expired} if _, ok := bc.items[name]; ok { return errors.New("the key is exist") } else { bc.items[name] = &t } return nil } func (bc *BeeCache) Delete(name string) (ok bool, err error) { bc.lock.Lock() defer bc.lock.Unlock() if _, ok = bc.items[name]; !ok { return } delete(bc.items, name) _, valid := bc.items[name] if valid { ok = false } return } func (bc *BeeCache) IsExist(name string) bool { bc.lock.RLock() defer bc.lock.RUnlock() _, ok := bc.items[name] return ok } // Start activates the file cache; it will func (bc *BeeCache) Start() error { dur, err := time.ParseDuration(fmt.Sprintf("%ds", bc.Every)) if err != nil { return err } bc.dur = dur bc.items = make(map[string]*BeeItem, 0) go bc.vaccuum() return nil } func (bc *BeeCache) vaccuum() { if bc.Every < 1 { return } for { <-time.After(time.Duration(bc.dur)) if bc.items == nil { return } for name, _ := range bc.items { bc.item_expired(name) } } } // item_expired returns true if an item is expired. func (bc *BeeCache) item_expired(name string) bool { bc.lock.Lock() defer bc.lock.Unlock() itm, ok := bc.items[name] if !ok { return true } dur := time.Now().Sub(itm.Lastaccess) sec, err := strconv.Atoi(fmt.Sprintf("%0.0f", dur.Seconds())) if err != nil { delete(bc.items, name) return true } else if sec >= itm.expired { delete(bc.items, name) return true } return false }

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

事情其实是这样的,当时领导交给我一个perf硬件性能监视的任务,在使用perf的过程中,输入命令perf list,我看到了以下信息:我的任务就要让这些cache事件能够正常计数,但关键是,我根本不知道这些misses、loads是什么意思。

随着互联网的快速发展,Web应用程序的使用越来越普遍,如何对Web应用程序的使用情况进行监控和分析成为了开发者和网站经营者的关注点。GoogleAnalytics是一种强大的网站分析工具,可以对网站访问者的行为进行跟踪和分析。本文将介绍如何在Beego中使用GoogleAnalytics来统计网站数据。一、注册GoogleAnalytics账号首先需要

随着云计算和微服务的兴起,应用程序的复杂性也随之增加。因此,监控和诊断成为了重要的开发任务之一。在这方面,Prometheus和Grafana是两款颇为流行的开源监控和可视化工具,可以帮助开发者更好地进行应用程序的监测和分析。本文将探讨如何在Beego框架中使用Prometheus和Grafana实现监控和报警。一、介绍Beego是一个开源的快速开发Web应

随着互联网和移动互联网的飞速发展,越来越多的应用需要进行身份验证和权限控制,而JWT(JSONWebToken)作为一种轻量级的身份验证和授权机制,在WEB应用中被广泛应用。Beego是一款基于Go语言的MVC框架,具有高效、简洁、可扩展等优点,本文将介绍如何在Beego中使用JWT实现身份验证。一、JWT简介JSONWebToken(JWT)是一种

在Beego框架中,错误处理是非常重要的一个部分,因为如果应用程序没有正确、完善的错误处理机制,它可能会导致应用程序崩溃或者无法正常运行,这对我们的项目和用户来说都是一个非常严重的问题。Beego框架提供了一系列的机制来帮助我们避免这些问题,并且使得我们的代码更加健壮、可维护。在本文中,我们将介绍Beego框架中的错误处理机制,并且讨论它们如何帮助我们避免应

随着互联网的迅速发展,分布式系统已经成为了许多企业和组织中的基础设施之一。而要让一个分布式系统能够正常运行,就需要对其进行协调和管理。在这方面,ZooKeeper和Curator是两个非常值得使用的工具。ZooKeeper是一个非常流行的分布式协调服务,它可以帮助我们在一个集群中协调各个节点之间的状态和数据。Curator则是一个对ZooKeeper进行封装

随着互联网的快速发展,越来越多的企业开始将其应用程序迁移到云平台上。而在云平台上进行应用的部署和管理,Docker和Kubernetes已经成为了两种非常流行和强大的工具。Beego是一个使用Golang开发的Web框架,它提供了诸如HTTP路由、MVC分层、日志记录、配置管理、Session管理等丰富的功能。在本文中,我们将介绍如何使用Docker和Kub

在当今科技快速发展的时代,编程语言也如雨后春笋般涌现出来。其中一门备受瞩目的语言就是Go语言,它以其简洁、高效、并发安全等特性受到了许多开发者的喜爱。Go语言以其强大的生态系统而著称,其中有许多优秀的开源项目。本文将介绍五个精选的Go语言开源项目,带领读者一起探索Go语言开源项目的世界。KubernetesKubernetes是一个开源的容器编排引擎,用于自
