Go语言两大流行缓存库,使用示例!

Go语言中两个比较流行的缓存库使用示例

 更新时间:2024年04月27日 09:18:02   作者:li_zehao  
缓存是计算机科学中的一个重要概念,设想某个组件需要访问外部资源,它向外部源请求资源,接收并使用资源,这些步骤都需要花费时间,下面这篇文章主要给大家介绍了关于Go语言中两个比较流行的缓存库使用的相关资料,需要的朋友可以参考下

GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!
如果你想靠AI翻身,你先需要一个靠谱的工具!

前言

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

1. go-cache

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

安装 go-cache:

1
go get github.com/patrickmn/go-cache

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main
 
import (
    "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

1
go get github.com/allegro/bigcache

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package main
 
import (
    "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 中实现带有过期时间的缓存,选择哪一个取决于你的具体需求和应用场景。

总结

到此这篇关于Go语言中两个比较流行的缓存库使用的文章就介绍到这了,更多相关Go语言缓存库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/QQ994406030/article/details/138210203

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • Golang干货分享之利用AST实现AOP功能

    Golang干货分享之利用AST实现AOP功能

    本文主要是一个纯干货分享,主要介绍了Golang如何利用AST实现AOP功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-04-04
  • Go 使用Unmarshal将json赋给struct出错的原因及解决

    Go 使用Unmarshal将json赋给struct出错的原因及解决

    这篇文章主要介绍了Go 使用Unmarshal将json赋给struct出错的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 基于go手动写个转发代理服务的代码实现

    基于go手动写个转发代理服务的代码实现

    这篇文章主要介绍了基于go手动写个转发代理服务的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • Golang import 导入包语法及一些特殊用法详解

    Golang import 导入包语法及一些特殊用法详解

    这篇文章主要介绍了Golang import 导入包语法及一些特殊用法,需要的朋友可以参考下
    2020-02-02
  • 详解go-admin在线开发平台学习(安装、配置、启动)

    详解go-admin在线开发平台学习(安装、配置、启动)

    这篇文章主要介绍了go-admin在线开发平台学习(安装、配置、启动),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • go doudou应用中使用注解示例详解

    go doudou应用中使用注解示例详解

    这篇文章主要为大家介绍了go doudou应用中使用注解示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Go中crypto/rsa库的高效使用指南

    Go中crypto/rsa库的高效使用指南

    本文主要介绍了Go中crypto/rsa库的高效使用指南,从 RSA 的基本原理到 crypto/rsa 库的实际应用,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Go语言实现简单Web服务器的方法

    Go语言实现简单Web服务器的方法

    这篇文章主要介绍了Go语言实现简单Web服务器的方法,实例分析了Web服务器的实现原理与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 看看你的Go应用是否用了正确CPU核数

    看看你的Go应用是否用了正确CPU核数

    这篇文章主要为大家介绍了Go应用正确的CPU核数分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Go语言定时任务cron的设计与使用

    Go语言定时任务cron的设计与使用

    这篇文章主要为大家详细介绍了Go语言中定时任务cron的设计与使用,文中的示例代码讲解详细,对我们深入掌握Go语言有一定的帮助,需要的可以参考下
    2023-11-11

最新评论

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空