【Golang】golang实现简单memcache
2023-02-18 15:36:57 时间
如果有使用内存存一些简单数据的功能,可以实现下面这样的带有过期时间的内存类
内存中存储key-value,并且可以设置过期时间
package tools import ( "sync" "time" ) // Memory struct contains *memcache.Client type Memory struct { sync.Mutex data map[string]*data } type data struct { Data interface{} Expired time.Time } // NewMemory create new memcache func NewMemory() *Memory { return &Memory{ data: map[string]*data{}, } } // Get return cached value func (mem *Memory) Get(key string) interface{} { if ret, ok := mem.data[key]; ok { if ret.Expired.Before(time.Now()) { mem.deleteKey(key) return nil } return ret.Data } return nil } // IsExist check value exists in memcache. func (mem *Memory) IsExist(key string) bool { if ret, ok := mem.data[key]; ok { if ret.Expired.Before(time.Now()) { mem.deleteKey(key) return false } return true } return false } // Set cached value with key and expire time. func (mem *Memory) Set(key string, val interface{}, timeout time.Duration) (err error) { mem.Lock() defer mem.Unlock() mem.data[key] = &data{ Data: val, Expired: time.Now().Add(timeout), } return nil } // Delete delete value in memcache. func (mem *Memory) Delete(key string) error { mem.deleteKey(key) return nil } // deleteKey func (mem *Memory) deleteKey(key string) { mem.Lock() defer mem.Unlock() delete(mem.data, key) } // clean all data func (mem *Memory) Clean() { mem.Lock() defer mem.Unlock() mem.data = map[string]*data{} }
使用方法
mem := NewMemory() mem.Set("name", "livechat", time.Duration(10)*time.Second) time.Sleep(time.Duration(2) * time.Second) name := mem.Get("name")
相关文章
- macOS 的 PHP 集成开发环境
- Github 无法访问
- 开源的Linux操作系统_Centos7下载
- linux awk 函数定义变量赋值,Linux中的Awk定义、用法详解
- fscanf读取一行字符串-C++的学习之路---12
- git强制拉取远程项目覆盖本地项目
- c++的链表-C++链表
- Linux UnblockNeteaseMusic 一键部署脚本
- c++的链表-链表入门(C++)
- c++的链表-C++实现简单链表
- Linux系统下安装JDK8和Maven3.8.5
- 使用Typora+PicGo实现图片自动上传到Gitee图床
- PWN头秃之旅 - 5.经典栈溢出实验(linux_x86)
- PWN头秃之旅 - 1.Linux的保护机制
- 靶机练习-VulnHub-Escalate_Linux: 1
- 中文编程是什么语言?-php是一种什么编程语言
- git命令学习
- Linux常用命令汇总
- c++ primer读书笔记
- 分享 Github 上适合开发人员强大开源的速查手册