惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

M
MIT News - Artificial intelligence
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
博客园 - Franky
腾讯CDC
T
Tailwind CSS Blog
Recent Announcements
Recent Announcements
V
V2EX
N
Netflix TechBlog - Medium
量子位
Jina AI
Jina AI
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
G
Google Developers Blog
爱范儿
爱范儿
博客园 - 叶小钗
D
Docker
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss

二丫讲梵

学习周刊-总第258期-2026年第15周 学习周刊-总第257期-2026年第14周 学习周刊-总第256期-2026年第13周 学习周刊-总第255期-2026年第12周 学习周刊-总第254期-2026年第11周 学习周刊-总第253期-2026年第10周 临时插播一条羊毛,免费领取450元大模型API代金券 学习周刊-总第252期-2026年第09周 学习周刊-总第251期-2026年第08周 学习周刊-总第250期-2026年第07周 学习周刊-总第249期-2026年第06周 诚邀评论,聊聊你所知欲知的我 学习周刊-总第248期-2026年第05周 我的QQ动态之2015年 我的QQ动态之2014年 我的QQ动态之2013年 我的QQ动态之2012年 我的QQ动态-2010-2011年 我的QQ动态-创栏小叙 学习周刊-总第247期-2026年第04周 Nexus社区版权益阉割--一文告诉你有哪些版本可以选择 学习周刊-总第246期-2026年第03周 学习周刊-总第245期-2026年第02周 学习周刊-总第244期-2026年第01周 学习周刊-总第243期-2025年第52周 学习周刊-总第242期-2025年第51周 开源项目ZenOps:带你领略禅意运维 学习周刊-总第241期-2025年第50周 用京东金融,享负债人生 学习周刊-总第240期-2025年第49周
go-cache包的使用简析
二丫讲梵 · 2023-03-19 · via 二丫讲梵

# 前言

平时用 go 写一些小工具的时候,如果数据的敏感性没有那么强,那么一些热数据就可以考虑放在 cache 当中,cache 也没必要用外置服务,那就直接使用本机内存进行存储即可。

go-cache 就是一个用于本地缓存的 Go 语言库,它支持过期时间和自动清理。它使用了一个内部的 goroutine 来检查缓存项是否过期,并在需要时自动清理过期的缓存项。使我们能够很方便地将一些数据放在缓存当中。

- name: go-cache
  desc: 一个提供 cache 能力的 go 库
  avatar: https://avatars2.githubusercontent.com/u/416130?s=460&u=8753e86600e300a9811cdc539aa158deec2e2724&v=4
  link: https://github.com/patrickmn/go-cache
  bgColor: "#ffa8a8"

1
2
3
4
5

# 安装

可以使用 go get 命令安装 go-cache 库:

go get github.com/patrickmn/go-cache

1

# 使用

# New

使用 go-cache 库非常简单。通过如下方法可以创建一个缓存对象:

import "github.com/patrickmn/go-cache"

c := cache.New(5*time.Minute, 10*time.Minute)

1
2
3

cache.New() 会创建一个缓存对象,它需要两个参数:

  • 第一个参数:表示缓存项的过期时间,如上示例表示 5 分钟后过期。
  • 第二个参数:表示缓存项的清除时间,如上示例表示 10 分钟后自动清除。

# Set

使用 Set 方法可以将一个键值对添加到缓存中:

c.Set("key", "value", cache.DefaultExpiration)

1

c.Set() 需要传递三个参数:

  • 第一个参数:指定缓存项的 key。
  • 第二个参数:指定缓存项的 value。
  • 第三个参数:指定该项目的过期时间。📢 注意: 一,此处指定的时间优先级大于 New 时的时间,如果这里指定为 2 分钟,则该缓存项将在 2 分钟后过期;二,如果配置为 cache.NoExpiration 则表示缓存项永不过期。

# Get

使用 Get 方法从缓存中获取一个键值对:

value, found := c.Get("key")
if found {
    fmt.Println(value)
}

1
2
3
4

这将获取名为 key 的键的值。如果找到了匹配的键,则 found 为 true。

# Delete

使用 Delete 方法可以将缓存项从缓存中移除:

表示直接将名为 key 的缓存项移除。

# Items

使用 Items 方法获取缓存中的所有键值对:

items := c.Items()
fmt.Println(len(items))

1
2

这将返回一个切片,包含缓存中的所有键值对。

# Purge

使用 Purge 方法清空缓存中的所有键值对:

这将清空缓存中的所有键值对。