先说结论吧。本文结合商业项目的使用场景,介绍了gcache的基本使用、缓存控制和淘汰策略。使用gcache进行缓存处理简单方便好用!优点gcache模块默认提供高速内存缓存,运行效率非常高,CPU性能损失在ns纳秒级别。它易于使用,非常适合单机应用。基本使用我们可以通过gcache.New()创建一个缓存对象,也可以直接使用gcache的封装方法,用法是一样的。下面的代码片段介绍了gcache的基本使用:/创建缓存对象,c:=gcache.New()//设置缓存,不过期_=c.Set("k1","v1",0)//获取缓存v,_:=c.Get("k1")fmt.Println("k1对应的值:",v)//v1//获取缓存大小n,_:=c.Size()fmt.Println("缓存大小:",n)//1//缓存中是否存在指定键名b,_:=c.Contains("k1")fmt.Println("K1是否存在:",b)//trueisContains,_:=c.Contains("k2")//falsefmt.Println("Whetherk2exists:",isContains)//删除并返回删除的键值fmt.Println(c.Remove("k1"))//v1//关闭缓存对象,让GC回收资源_=c.Close()//当然也可以方便直接使用gcache封装的方法,方法同上,gtime.M*30)//半小时后过期k2Value,_:=gcache.Get("k2")fmt.Println("value对应k2:",k2Value)//v2}打印结果缓存控制下面介绍一些特殊场景的用法:whenWriteifthekeydoesnotexist:SetIfNotExist.当根据键名取不到值时,写:GetOrSet。packagemainimport("fmt""github.com/gogf/gf/os/gcache""time")funcmain(){//key名不存在时写入,设置过期时间为1秒_,_=缓存。SetIfNotExist("k1","v1",time.Second)//打印当前键名列表keys,_:=gcache.Keys()fmt.Println("打印当前键名列表:",keys)//[k1]//打印当前key-value列表values,_:=gcache.Values()fmt.Println("Printthecurrentkey-valuelist:",values)//[v1]//获取指定keyvalue,如果不存在则写入,返回key值;第三个参数设置为0表示永不过期v,_:=gcache.GetOrSet("k2","v2",0)fmt.Println("写入的key值:",v)//v2//打印当前键值对dataMap,_:=gcache.Data()fmt.Println("打印当前键值对:",dataMap)//map[k1:v1k2:v2]//等待for1secondk1:v1自动过期time.Sleep(time.Second)//再次打印当前键值对,发现k1:v1已经过期,只剩下k2:v2data2,_:=gcache.Data()fmt.Println("等待一秒后,打印当前键值对:",data2)//map[k2:v2]}打印结果缓存淘汰策略这也是之前做项目时设计的,不过,现在gcache自然支持缓存淘汰策略。我举个项目中的例子:比如我有一个新闻网站。为了保证新闻详情页的加载速度,新闻详情页会进行缓存(内容缓存、评论点赞等动态获取)。一般来说,新生成的新闻会有较高的热度和访问量,需要缓存,而旧的消息会因为流行度不再,访问量低而从缓存中释放。解决上述问题一般有两种方式:一种是设置缓存时间,一种是设置缓存淘汰策略。比如:我一共允许缓存10000个缓存详情页。当数量超过10000条时,将淘汰最早缓存的数据,实现动态稳定的缓存策略。gcache自然支持这种缓存淘汰策略代码示例下面是一个简单的例子::=gcache.New(2)//添加10个没有过期的元素fori:=0;我<10;i++{_=c.Set(i,i,0)}n,_:=c.Size()fmt.Println("缓存大小:",n)keys,_:=c.Keys()fmt.Println("缓存键值:",keys)//读取键名1,保证键名先保留v,_:=c.Get(1)fmt.Println("读取键名1的值:",v)//等待一定时间后(默认每秒检查一次),//元素将按照从旧到新的顺序淘汰fori:=0;我<10;i++{time.Sleep(2*time.Second)n,_=c.Size()fmt.Println("缓存大小:",n)keys,_=c.Keys()fmt.Println("缓存键值:",keys)}}打印结果提示GetOrSetFunc使用GetOrSetFunc获取一个缓存值,缓存不存在时执行指定的ffunc()(interface{},error),缓存f方法的结果值,并返回结果。总结本文结合商业项目的使用场景,介绍了gcache的基本使用、缓存控制和淘汰策略。单机项目可以使用gcache进行缓存处理,简单方便,容易上手;分布式应用可以使用gredis进行缓存处理,关注我,下一篇介绍gredis的使用。本文转载自微信公众号《程序员的升级打怪之旅》,作者“王中阳围棋”,可通过以下二维码关注。转载本文请联系《程序员升级打怪之旅》公众号。
