go-cache无法清除cache.什么cache可以
推荐替代方案
1.TwiN/gocache— 最推荐,API 最直观
支持Clear()一键清空、DeleteAll()批量删除,还有DeleteKeysByPattern()按模式删除。
go
import "github.com/TwiN/gocache/v2" cache := gocache.NewCache().WithMaxSize(10000).WithEvictionPolicy(gocache.LeastRecentlyUsed) cache.StartJanitor() // 启动后台自动清理过期项 cache.Set("key", "value") cache.Clear() // ✅ 一键清空 cache.Delete("key") // ✅ 删除单个2.maypok86/otter— 2025 年高性能首选
Go 缓存库的新标杆,自适应 W-TinyLFU 淘汰策略,支持 TTL 自动过期,性能远超 Ristretto。
go
import "github.com/maypok86/otter" cache, _ := otter.MustBuilder[string, string](1000). WithTTL(time.Hour). Build() cache.Set("key", "value") cache.Delete("key") // ✅ 删除 // 支持自动过期,无需手动清理3.allegro/bigcache— 大数据量场景
适合存储 GB 级数据,但不支持 TTL 自动过期,只能手动清除。
4.orca-zhang/ecache— 极简轻量
代码不到 300 行,30 秒接入,支持 LRU/LRU-2,有Delete()方法。
go
c := ecache.NewLRUCache(16, 200, 10*time.Second) c.Put("key", value) c.Del("key") // ✅ 删除5.dgraph-io/ristretto— 经典高性能
老牌高性能缓存,支持 TTL 和Del(),但 API 相对底层。
快速对比
表格
| 库 | 自动清除过期项 | 手动清空 | 性能 | 适用场景 |
|---|---|---|---|---|
patrickmn/go-cache | ❌ 需手动DeleteExpired() | ❌ 无Clear() | 一般 | 简单场景 |
| TwiN/gocache | ✅ Janitor 后台清理 | ✅Clear() | 良好 | 通用首选 |
| otter | ✅ 自动 TTL | ✅Delete() | 极高 | 高性能首选 |
| bigcache | ❌ 手动 | 需遍历 | 高 | GB 级大数据 |
| ecache | ✅ TTL | ✅Del() | 高 | 极简快速接入 |
建议
如果你只是想要一个功能完善、API 直观的替代:
TwiN/gocache是最佳选择,直接替换 go-cache 即可。如果你追求极致性能(高并发、低延迟):选
otter(Go 版 Caffeine)。
两者都解决了 go-cache 无法自动清除和无法一键清空的核心痛点。
