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

常州做网站一般多少钱网站设计比例

常州做网站一般多少钱,网站设计比例,泰安集团网站建设价格,爱拍怎么创建wordpressttl(time-to-live) 数据存活时间#xff0c;我们这里指数据在内存中保存一段时间#xff0c;超过期限则不能被读取到#xff0c;与Redis的ttl机制类似。本文仅实现ttl部分#xff0c;不考虑序列化和反序列化。 获取当前时间 涉及时间计算#xff0c;这里首先介绍如何获取… ttl(time-to-live) 数据存活时间我们这里指数据在内存中保存一段时间超过期限则不能被读取到与Redis的ttl机制类似。本文仅实现ttl部分不考虑序列化和反序列化。 获取当前时间 涉及时间计算这里首先介绍如何获取当前时间以及时间的精度这里为了简化精度到秒级。 使用time.Now可以获取当前时间time.Unix 或 time.UnixNano可以获得时间戳。 now : time.Now() // current local time sec : now.Unix() // number of seconds since January 1, 1970 UTC nsec : now.UnixNano() // number of nanoseconds since January 1, 1970 UTCfmt.Println(now) // time.Time fmt.Println(sec) // int64 fmt.Println(nsec) // int64输出结果 2023-02-19 16:52:51.5894329 0800 CST m0.004286801 1676796771 1676796771589432900数据结构 首先定义数据结构数据结构及存储数据容器的结构 type Data struct {Key stringValue interface{}Timestamp int64 }type Heap struct {dataMx *sync.RWMutexdata map[string]Data }Data 包括key和value以及ttl时间单位秒Heap容器包括map类型data以及RWMutex读写锁读写锁是支持并发操作。 下面定义Heap结构一些方法。 Heap操作 主要方法包括NewSetDelGet三个方法。 func New() *Heap {return Heap{dataMx: sync.RWMutex{},data: map[string]Data{},} }func (h *Heap) Set(key string, value interface{}, ttl int64) {if ttl 0 {return}data : Data{Key: key,Value: value,Timestamp: time.Now().Unix(),}if ttl 0 {data.Timestamp ttl} else if ttl 0 {data.Timestamp -1}h.dataMx.Lock()h.data[key] datah.dataMx.Unlock() }func (h *Heap) Get(key string) (val interface{}, ok bool) {var data Datah.dataMx.RLock()data, ok h.data[key]h.dataMx.RUnlock()if ok {if data.Timestamp ! -1 data.Timestamp time.Now().Unix() {h.Del(key)ok false} else {val data.Value}}return }func (h *Heap) Del(key string) {h.dataMx.RLock()_, ok : h.data[key]h.dataMx.RUnlock()if !ok {return}h.dataMx.Lock()delete(h.data, key)h.dataMx.Unlock() } New方法无需多解释我们直接看Set方法。 Set方法实现逻辑如果ttl为0则直接返回反之先初始化Data数据这里初始化当前时间为Data的时间戳接着判断ttl如果大于零则Data的时间戳加上ttl反之为-1下面开始通过读写锁存储Heap的data。 Del方法首先通过读锁读取key对应数据如果失败直接返回可能已经过期其他协程已经获取过反之直接删除数据。 Get方法读取逻辑与Del一样如果正确读取则判断时间戳不等于-1且小于当前时间则表明已过期调用Del方法进行删除返回nil和false反之返回value及true。 测试ttl容器Heap 首先定义heap,然后调用Set方法增加数据key,value,ttl为2秒 func main() {keyTag : keyheap : New()defer func() {heap.Del(keyTag)}()heap.Set(keyTag, value, 2)time.Sleep(1 * time.Second)val, flag : heap.Get(keyTag)fmt.Printf(%v, %v\n, val, flag)time.Sleep(1 * time.Second)val, flag heap.Get(keyTag)fmt.Printf(%v, %v\n, val, flag) } 然后模拟等待1秒后调用Get方法两次直接结果和预期一致 value, true nil, false完整代码 下面给出完整代码 package mainimport (fmtsynctime )type Data struct {Key stringValue interface{}Timestamp int64 }type Heap struct {dataMx *sync.RWMutexdata map[string]Data }func New() *Heap {return Heap{dataMx: sync.RWMutex{},data: map[string]Data{},} }func (h *Heap) Set(key string, value interface{}, ttl int64) {if ttl 0 {return}data : Data{Key: key,Value: value,Timestamp: time.Now().Unix(),}if ttl 0 {data.Timestamp ttl} else if ttl 0 {data.Timestamp -1}h.dataMx.Lock()h.data[key] datah.dataMx.Unlock() }func (h *Heap) Get(key string) (val interface{}, ok bool) {var data Datah.dataMx.RLock()data, ok h.data[key]h.dataMx.RUnlock()if ok {if data.Timestamp ! -1 data.Timestamp time.Now().Unix() {h.Del(key)ok false} else {val data.Value}}return }func (h *Heap) Del(key string) {h.dataMx.RLock()_, ok : h.data[key]h.dataMx.RUnlock()if !ok {return}h.dataMx.Lock()delete(h.data, key)h.dataMx.Unlock() }func main() {keyTag : keyheap : New()defer func() {heap.Del(keyTag)}()heap.Set(keyTag, value, 2)time.Sleep(1 * time.Second)val, flag : heap.Get(keyTag)fmt.Printf(%v, %v\n, val, flag)time.Sleep(1 * time.Second)val, flag heap.Get(keyTag)fmt.Printf(%v, %v\n, val, flag) } 总结 本文解释Golang如果实现ttl机制在内存存储自动失效数据。首先介绍时间戳原理然后定义数据结构并简单实现Set、Get、Del方法实现了ttl机制。未来再增加序列化功能保存和恢复。参考实现https://github.com/leprosus/golang-ttl-map。
http://www.hkea.cn/news/14498348/

相关文章:

  • 怎么提高网站曝光wordpress搜视网
  • 做网站 过程太原关键词排名首页
  • 怀化网站建设有哪些电脑突然多了windows优化大师
  • 哪里可以做虚拟货币网站表格可以做网站么
  • 建设银行住房公积网站谷歌seo网站运营
  • 手机网站开发软件做网站排名公司推荐
  • 精品课程云网站建设企业网站模板湖南岚鸿模板
  • 做一个网站完整的网页网站后台更新 前台看不到
  • 网站空间支付方式怎么用网站做淘宝客
  • 郑州电商网站建设h5个人页面制作
  • wordpress如何上传案例seo免费培训教程
  • 网站怎么做百度排名wordpress博客优点
  • 网站建设潮州wordpress 2.0漏洞
  • 万网 网站建设方案书成都搭建企业网站
  • 烟台网站关键字优化微信第三方平台
  • 西安网站建设g广州网站设计开发招聘
  • 公司长沙建站网站建设创意报告书
  • 有没有专门做衣服搭配的网站国外网站开发技术现状
  • 网站开发html书籍下载企业小程序建设的公司
  • 如何用phpstudy做网站牛肉煲的做法
  • 阿里云虚拟主机与网站吗影视自助建站官网
  • 教育培训网站抄袭个人网页网站制作模板
  • 新民专业网站开发公司网站怎么上传数据库
  • 营销建设网站上海网站备案在哪里查询
  • 网站域名备案查询官网网站怎么创建自己的网站
  • 网站改版流程百度推广要多少钱
  • 福州网站设计外包软件开发服务费用报销分录
  • 优秀网站模板下载网络工程技术适合女生吗
  • 网站扩展名网页制作成品网站
  • 扬州市做网站.net 网站开发视频教程