Golang Go语言中有什么好用的 cache 方案?
Golang Go语言中有什么好用的 cache 方案?
本来准备直接用 map 做 cache,但 map 不支持 concurrent,并且我还希望能满足下面两点:
- 支持设置 cache 的最大数量
- 支持设置 cache 的最大内存使用量
有什么推荐吗?
自己写,两个需求都简单。map 加个锁就行
更多关于Golang Go语言中有什么好用的 cache 方案?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
当达到最大数量或内存时,要能自动删除近期最少使用(LRU)的值。
有现成的库吗?自己写好像有点麻烦。
不知道这个能否满足你的要求 https://github.com/ysmood/umi
手撸一个 redis ?
收了,感谢先,近来可能用上
做个计算器,然后用 sync.Map ,没入一个对象,重新计算下内存大小。
感觉都是简单的事情,就是包装个 Add/Dell 方法
小打小闹用 sync.Map
想分布式就麻烦了 自己根据需求挑吧
https://libs.garden/go/search?q=cache&sort=popular
groupcache
不考虑用 redis 的原因是啥?
LRUCache 很简单,可以做到查找更新都是 log(N)复杂度。
但是 go 这种"modern"语言居然不支持泛型,所以 cache 也用起来难受。
建议用读写锁操作含类型的 map,用 sync.map 会丢失类型,每次都要检查类型很麻烦
本地的话 map 加锁或者 sync.map ,分布式用 redis,有原子操作需求上 lua 脚本。
在Golang中,有多种好用的cache方案可供选择,以下是一些推荐:
-
Redis Cache Library for Golang:
- 基于Redis作为后端存储的缓存库,由uptrace团队开发,是Uptrace分布式追踪系统的一部分。
- 采用高效的MessagePack序列化机制,支持可选的本地缓存增强(如TinyLFU),提供内存级别的快速访问。
- 内建对OpenTelemetry Metrics的支持,便于监控缓存命中率。
-
Mango Cache:
- 受Google Guava Cache启发的Go语言实现,支持多种缓存替换策略(如LRU、Segmented LRU、TinyLFU)。
- 特别适用于需要大量读取且数据更新相对较少的应用环境,如API服务缓存、高频访问的数据字典等。
- 提供灵活的配置选项和直观的监控接口,有助于性能调优和问题排查。
-
sync.Map:
- Go语言标准库提供的并发安全的map,可用于实现简单的缓存。
- 使用方便,但缺少过期时间和复杂的缓存替换策略等高级功能。
-
第三方库:
- 如go-cache、bigcache等,也提供了丰富的缓存特性。
- 这些库通常具有良好的社区支持和文档,适合需要快速集成缓存功能的项目。
在选择cache方案时,建议根据项目的具体需求、性能要求以及团队的技术栈进行综合考虑。