Go语言中,两个比较流行的缓存库

news/2024/10/22 17:37:53/

在 Go 中实现带有过期时间的缓存通常需要一个可以自动处理键值过期的缓存系统。虽然标准库中没有直接提供这种功能,但有几个流行的第三方库可以很好地满足这一需求。下面我会介绍两个比较流行的 Go 缓存库:go-cache 和 bigcache。

1. go-cache

go-cache 是一个内存中的键值对缓存库,支持可过期条目。它是一个线程安全的缓存库,可以设定每个缓存项的生存时间(TTL)。

安装 go-cache:

go get github.com/patrickmn/go-cache

使用示例:

package mainimport ("fmt""github.com/patrickmn/go-cache""time"
)func main() {// 创建一个缓存,设置默认过期时间为 5 分钟,每 10 分钟清理过期项目c := cache.New(5*time.Minute, 10*time.Minute)// 设置一个键值,过期时间为 1 分钟c.Set("key1", "value1", 1*time.Minute)// 从缓存中获取键值val, found := c.Get("key1")if found {fmt.Println("key1:", val)}// 等待超过 1 分钟后再次尝试获取time.Sleep(70 * time.Second)val, found = c.Get("key1")if found {fmt.Println("key1 still:", val)} else {fmt.Println("key1 has expired")}
}

在这个示例中,我们创建了一个 go-cache 实例,并添加了一个键值对,设置了 1 分钟的过期时间。通过 Set 和 Get 方法可以轻松地添加和检索缓存项。

2. bigcache

bigcache 是一个高效的键值缓存,专为单机环境优化。它不自带过期处理,但可以配置以在设置时启用。

安装 bigcache

go get github.com/allegro/bigcache

使用示例:

package mainimport ("fmt""github.com/allegro/bigcache""time"
)func main() {config := bigcache.DefaultConfig(10 * time.Minute)config.CleanWindow = 5 * time.Minute// 创建一个缓存cache, err := bigcache.NewBigCache(config)if err != nil {panic(err)}// 添加键值cache.Set("key1", []byte("value1"))// 获取键值entry, err := cache.Get("key1")if err != nil {fmt.Println("Error retrieving key1:", err)} else {fmt.Println("key1:", string(entry))}// 模拟时间推移time.Sleep(15 * time.Minute)_, err = cache.Get("key1")if err != nil {fmt.Println("key1 has expired")}
}

bigcache 更适合处理大量数据和高负载情况,但其配置和使用相对复杂一些。

这两个库都能在 Go 中实现带有过期时间的缓存,选择哪一个取决于你的具体需求和应用场景。如果你对这些库有任何疑问或者需要进一步的帮助,请随时联系我!


http://www.ppmy.cn/news/1439673.html

相关文章

DaPy:实现数据分析与处理

DaPy:实现数据分析与处理 DaPy是一个用于数据分析和处理的Python库,它提供了一系列强大的工具和功能,使开发者能够高效地进行数据清洗、转换和分析。本文将深入解析DaPy库的特点、功能以及使用示例,帮助读者了解如何利用DaPy库处理…

目标检测——YOLOv6算法解读

论文:YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications (2022.9.7) 作者:Chuyi Li, Lulu Li, Hongliang Jiang, Kaiheng Weng, Yifei Geng, Liang Li, Zaidan Ke, Qingyuan Li, Meng Cheng, Weiqiang Nie, Yiduo Li, Bo …

比特币中用到的密码学功能【区块链学习笔记1】

想要转到web3,这次学习区块链看的课是北大肖臻老师的公开课。 比特币又称是加密货币crypto-currency,但其实是不加密的,全是公开的。比特币中用到的密码学中HASH和签名。 1. HASH 密码学中的哈希:cryptographic hash function …

Android 面试题集锦

和你一起终身学习,这里是程序员Android Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。这里会不断收集和更新Android基础相关的面试题&am…

伪装目标检测中数据集的标注格式:COCO和VOC

1.OSFormer中提供的COD10K的json格式,是coco的格式,但由于伪装目标检测任务的特殊性,标注信息中还有一个segmentation段 "images": [{"id": 3039,"file_name": "COD10K-CAM-1-Aquatic-1-BatFish-3.jpg&qu…

Docker镜像的创建 和 Dockerfile

一. Docker 镜像的创建 创建镜像有三种方法,分别为基于已有镜像创建、基于本地模板创建以及基于 Dockerfile 创建。 1 基于现有镜像创建 (1)首先启动一个镜像,在容器里做修改docker run -it --name web3 centos:7 /bin/bash …

杰发科技AC7840——ADC简介(1)_双路ADC同时使用

0. 简介 1. 特性 2. 双路ADC Sample里面没有双路的,以为那个规则组只有一个通道,看了外设寄存器才发现,原来他的通道是双路的。 注意1: ADC硬件引脚的配置 注意2: 规则组长度设置和 RSEQ序列号和CH通道号组合应该就对应了转换顺序&#xff0…

白帽子讲Web安全读书笔记

-- 书的结构 4大篇共18章: 我的安全世界观:安全历史->作者对安全的看法与态度->思考问题的方式和做事的方法客户端脚本攻击:对浏览器的深入理解将有助于做好该解决方案服务端应用安全:网站安全建设之初的重点处理问题大安…