范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

golang实现自定义Cache模型

  有时候我们在我们自己的项目中需要实现兼容各种驱动的Cache模型,以便于通过配置更换缓存类型。 缓存模型需要支持不同驱动,例如:memory、file、redis、mysql,实现思路代码如下: cache.go文件,定义缓存对外接口模型代码//可以自定义扩展驱动类型 默认是 memory driver   package cache   import ( 	"./driver" )   //cache接口声明 type Cacher interface { 	GetStorage() driver.Containerer 	Set(k string, v interface{}) 	Get(k string) (interface{}, bool) 	Del(k string) 	Has(k string) bool }   //create memory cache //type "file" or "memory" func Newcache(cacheType string) Cacher { 	switch cacheType { 	case "memory": 		return &driver.CacheImpl{Driver: driver.NewMapContainer()} 	case "file": 		{ 			return &driver.CacheImpl{Driver: driver.NewFileContainer()} 		} 	case "mysql": 		{ 			return &driver.CacheImpl{Driver: driver.NewMysqlContainer()} 		} 	case "redis": 		{ 			return &driver.CacheImpl{Driver: driver.NewRedisContainer()} 		} 	case "mongodb": 		{ 			return &driver.CacheImpl{Driver: driver.NewMongoContainer()} 		} 	} 	return nil }driver.go 实现驱动,这里我只利用Map实现了,具体其他驱动可自行实现//可以自定义扩展驱动类型 默认是 memory cache   package driver   //容器接口声明 type Containerer interface { 	PushKVPair(k, v interface{}) Containerer 	EraseKVPair(k interface{}) Containerer 	PushKVMaps(maps ...map[string]interface{}) Containerer 	ResetKVPair(k string, v interface{}) Containerer 	ResetOrAddKVPair(k string, v interface{}) Containerer 	ResetKVPairs(kvMaps map[string]interface{}) Containerer 	ResetOrAddKVPairs(kvMaps map[string]interface{}) Containerer 	Exist(k interface{}) bool 	GetData() *map[string]interface{} }   //基于内存实现的缓存 type CacheImpl struct { 	Driver Containerer //数据缓存驱动 }   func (self *CacheImpl) Exist(k interface{}) bool {   	return self.Driver.Exist(k) }   func (self *CacheImpl) GetStorage() Containerer { 	return self.Driver }   //set func (self *CacheImpl) Set(k string, v interface{}) { 	self.Driver.PushKVPair(k, v) }   //get func (self *CacheImpl) Get(k string) (interface{}, bool) { 	mapData := *self.Driver.GetData() 	val, ok := mapData[k] 	return val, ok }   //erase func (self *CacheImpl) Del(k string) { 	self.Driver.EraseKVPair(k) }   //has func (self *CacheImpl) Has(k string) bool { 	mapData := *self.Driver.GetData() 	_, ok := mapData[k] 	return ok }   //Map实现的内存驱动 type MapContainer struct { 	data map[string]interface{} }   //创建数据channer func NewMapContainer() *MapContainer { 	return &MapContainer{data: make(map[string]interface{})} }   func (this *MapContainer) PushKVPair(k, v interface{}) Containerer { 	if key, ok := k.(string); !ok { 		panic("key必须是string类型!") 	} else { 		this.data[key] = v 	} 	return this }   func (this *MapContainer) Exist(k interface{}) bool { 	return true }   func (this *MapContainer) EraseKVPair(k interface{}) Containerer { 	if key, ok := k.(string); !ok { 		panic("key必须是string类型!") 	} else { 		delete(this.data, key) 	} 	return this } func (this *MapContainer) PushKVMaps(maps ...map[string]interface{}) Containerer { 	for _, itemMap := range maps { 		for itemKey, itemValue := range itemMap { 			this.PushKVPair(itemKey, itemValue) 		} 	} 	return this } func (this *MapContainer) ResetKVPair(k string, v interface{}) Containerer { 	if _, ok := this.data[k]; ok { 		this.data[k] = v 	} 	return this } func (this *MapContainer) ResetOrAddKVPair(k string, v interface{}) Containerer { 	this.data[k] = v 	return this }   func (this *MapContainer) ResetKVPairs(kvMaps map[string]interface{}) Containerer { 	for k, v := range kvMaps { 		if _, ok := this.data[k]; ok { 			this.data[k] = v 		} 	} 	return this }   func (this *MapContainer) ResetOrAddKVPairs(kvMaps map[string]interface{}) Containerer { 	for k, v := range kvMaps { 		this.data[k] = v 	} 	return this }   func (this *MapContainer) GetData() *map[string]interface{} { 	return &this.data }
  到此一个基础Memory类型的驱动就构建完成 ,我们也可以通过这个模型去构建 redis、mysql等等驱动实现自定义缓存。

想买个彩电,海信的ULED技术怎么样?海信ULED确实厉害,目前在国内外的技术领先有目共睹。目前海信55英寸的ULED电视大概5k6k,也属于大屏电视中高档位行列,可见地位之高。有关ULED技术的先进性题主大可以自己找互联网运营师有哪些就业方向?由于在互联网产品当中,用户的持续参与成为了产品的核心价值之一。为了能让用户持续参与进来并创造更多的价值,因此产生了运营这类工作。相对于产品负责界定和提供长期用户价值,运营负责创造短联想的警钟敲醒了谁?敲醒了那些伴着两面人生的戏精贪官,跪舔西方屁眼时间久了,而直不起腰的崇洋媚外者叛徒特务奸细!随着日益强大的新中国,这些眉骨百像恶态的恶心人,将会被中国人民抛弃敲醒了人民大众,不要再2021年了,电脑主机还有必要配E3吗?由于此前E3处理器在规格和性能方面接近同代i7处理器,而价格则和同代i5接近,E3处理器可以使用普通电脑主板,所以E3处理器一直以来都深受电脑用户的喜爱,而从三代E3处理器后,In老用户大量流失,风评还不如OV,为什么小米手机口碑越来越差?试着买了一个红米k30至尊纪念版居然TM的断流没信号到没法用,系统还不如我荣耀v10,不知道为什么至尊纪念版都敢这么干,脸都不要了,小米还能留证据什么。我买的米8每天自己重启死机最华为Mate40Pro新售价已定,128GB版跌破4900,华为P50Pro不香了说到高端旗舰手机,相信大家印象中第一个也就是苹果的iPhone了,毕竟iPhone不像安卓手机一样覆盖低中高三个层级,起步的售价就定在5千多,就连iPhoneSE的起售价也在329未删除非法内容,谷歌在俄罗斯遭罚款300万卢布财经网科技11月30日讯,据新浪科技消息,莫斯科法院向谷歌开出300万卢布罚单(约40400美元),因为谷歌没有删除非法内容。在处理被禁内容时,因为搜索引擎和YouTube多次违规打造产业集群效应,汽车芯片创新成果集中对接近日,由北京经济技术开发区管理委员会主办,中国汽车芯片产业创新战略联盟承办的三城一区高校创新成果对接会(以下简称创新成果对接会)圆满落下帷幕。会议邀请北京市三城一区高校院所的专家学小鹏汽车李鹏程探索未来出行智能时代加速到来分享全文大家好,我是小鹏汽车李鹏程,在小鹏汽车负责整个的品牌和公关,2019年加入这个团队,伴随着中国智能汽车的成长,我也跟小鹏汽车一起走过了接近三年时间。在这三年里,我们能看到中Android12快速适配要点,永远别为适配掉光了头发作者恋猫de小郭Android12需要更新适配点并不多,本篇主要介绍最常见的两个需要适配的点androidexported和SplashScreen。一androidexporte三大举措助推!中国芯投入8000亿后,美59家巨头发出联名信对华为芯片禁令的实施,以及把我国多个企业加入实体清单,看似对我们的企业实施了制裁,实际上美企受损也非常厉害,这个从美半导体协会的警告就能明白。并且更大的反应是,我国企业因此已经彻底
COVID19推动物联网在石油和天然气领域的采用Inmarsat的一项调查报告称,74的参与调查者至少部署了一个物联网项目。在从2020年第二季度开始的12个月中,44的人采取了这一步骤。在尚未采用任何物联网项目的26中,所有人荣耀智慧屏X2体验这就是客厅C位的最佳选择自从荣耀推出智慧屏产品,家庭的智慧生活格局就迎来了全面的升级。智慧屏不仅仅是影音享受的工具,更是成为了家庭的智慧中枢。最近荣耀又带来了全新产品荣耀智慧屏X2,在优秀屏幕素质,越级影春剑的养护技巧,如何才能养护好并且开花?春剑在每年的5月份左右开始长出叶芽,而花芽形成则在每年的8月中旬左右,等到10月份左右花苞才开始破土而出,花期一般在13月份之间,开花周期大概在一个月左右。春剑喜欢温暖湿润的生长环杜鹃花的养护技巧杜鹃的生长适温为1225,夏季气温超过30时,杜鹃的枝梢叶片基本上停止生长,整个植株处于半休眠状态。这就是为什么我们看到杜鹃在高温环境下,枝叶反而没有什么变化。所以我们在夏季要注意蝴蝶兰如何养护才能开花很多?谈起兰花,几乎都是接受不了强光的照射。因为原生于山林间,潜伏在基因里面的生长习性难以改变。蝴蝶兰也无法抵挡强光的照射,那样会损伤根部及叶片。反之,全阴的位置也不利于生长,那样叶片无vivo子品牌的新一代旗舰机型iQOO8和iQOO8pro热点都在哪里?首先,从处理器性能来看iQOO8是骁龙888芯片LPPDR5UFS3。1组合,iQOO8pro是骁龙888plus芯片LPPDR5UFS3。1组合,两者都具备独立显示的游戏芯片机身2021年8月新品首发热门手机都有谁入选?当8月即将进入结尾时刻,在百花齐放的手机市场里,目前市场热度较高的新品手机里,基本上也就围绕着这三家展开的荣耀magic3系列,vivo的子品牌iQOO8系列,小米MIX4,那么关这样选择智能手机都不会吃亏现在的智能手机类目几乎是五花八门,季季都有新款,厂商的不断广告炒作让我们很多人都不知道该怎么选择?有时候被销售员洗脑,买回来才发现,根本就不是那么回事?图片源自网络,仅供参考那么今有人热议荣耀Magic3系列和华为Mate50有关系?准确的来说,荣耀Magic系列和华为Mate50系列真没有一点关系的亲!因为目前华为Mate50系列还因为制裁而在艰难的探索之中,要不然也不会让荣耀品牌从华为整体剥离了,因为剥离后清新空气一键搞定思乐智CAPS400A空气净化器链接视频10月国庆一过,浙江沪包邮地区的气温就会有一个断崖式的下跌。除了感受到江南的魔法攻击之外,一家人也逐渐减少了出门的时间。但是随着居家时间的越来越多,室内空气质量又成了我很关安静又暖心,清凉高颜值洛斐有范儿桌面风扇很多熟悉二毛的朋友对洛斐应该已经不陌生了,二毛已经在给大家分享过多款洛斐的趣味办公用品小浪无线蓝牙键盘小瓣鼠标拾光灯等等产品。可以说在颜值界洛斐称第二,没人敢称第一,而洛斐又不单单