Go-缓存策略实战从本地缓存到Redis多级缓存架构
文章导语
缓存是高并发系统的基石。Go中,从内存缓存(sync.Map/freecache)到分布式缓存(Redis),再到多级缓存架构,每个选择都有其适用场景和性能特征。
一、本地缓存方案
// 1. sync.Map——简单场景varcache sync.Map// 2. freecache——高性能,零GCcacheSize:=100*1024*1024// 100MBcache:=freecache.NewCache(cacheSize)cache.Set([]byte("key"),[]byte("value"),60)// 3. bigcache——适合大valueconfig:=bigcache.DefaultConfig(10*time.Minute)cache,_:=bigcache.NewBigCache(config)二、缓存穿透/击穿/雪崩
// 缓存穿透:查不存在的数据→缓存空值funcGetWithNullCache(keystring)(string,error){val,err:=cache.Get(key)iferr==nil{returnval,nil// 包括空值标记}// 查DBresult:=queryDB(key)cache.Set(key,result,ttl)returnresult,nil}// 缓存击穿:热点key过期→singleflightimport"golang.org/x/sync/singleflight"varg singleflight.GroupfuncGet(keystring)(string,error){v,err,_:=g.Do(key,func()(interface{},error){returnqueryDB(key)})returnv.(string),err}三、全文总结
singleflight防止缓存击穿,空值缓存防止穿透,随机TTL防止雪崩,freecache/bigcache高性能本地缓存。
参考文献
- freecache: https://github.com/coocood/freecache
- bigcache: https://github.com/allegro/bigcache
- golang.org/x/sync/singleflight