游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

golang实现自定义Cache模型

  有时候我们在我们自己的项目中需要实现兼容各种驱动的Cache模型,以便于通过配置更换缓存类型。缓存模型需要支持不同驱动,例如:memory、file、redis、mysql,实现思路代码如下:cache。go文件,定义缓存对外接口模型代码可以自定义扩展驱动类型默认是memorydriverpackagecacheimport(。driver)cache接口声明typeCacherinterface{GetStorage()driver。ContainererSet(kstring,vinterface{})Get(kstring)(interface{},bool)Del(kstring)Has(kstring)bool}creatememorycachetypefileormemoryfuncNewcache(cacheTypestring)Cacher{switchcacheType{casememory:returndriver。CacheImpl{Driver:driver。NewMapContainer()}casefile:{returndriver。CacheImpl{Driver:driver。NewFileContainer()}}casemysql:{returndriver。CacheImpl{Driver:driver。NewMysqlContainer()}}caseredis:{returndriver。CacheImpl{Driver:driver。NewRedisContainer()}}casemongodb:{returndriver。CacheImpl{Driver:driver。NewMongoContainer()}}}returnnil}driver。go实现驱动,这里我只利用Map实现了,具体其他驱动可自行实现可以自定义扩展驱动类型默认是memorycachepackagedriver容器接口声明typeContainererinterface{PushKVPair(k,vinterface{})ContainererEraseKVPair(kinterface{})ContainererPushKVMaps(maps。。。map〔string〕interface{})ContainererResetKVPair(kstring,vinterface{})ContainererResetOrAddKVPair(kstring,vinterface{})ContainererResetKVPairs(kvMapsmap〔string〕interface{})ContainererResetOrAddKVPairs(kvMapsmap〔string〕interface{})ContainererExist(kinterface{})boolGetData()map〔string〕interface{}}基于内存实现的缓存typeCacheImplstruct{DriverContainerer数据缓存驱动}func(selfCacheImpl)Exist(kinterface{})bool{returnself。Driver。Exist(k)}func(selfCacheImpl)GetStorage()Containerer{returnself。Driver}setfunc(selfCacheImpl)Set(kstring,vinterface{}){self。Driver。PushKVPair(k,v)}getfunc(selfCacheImpl)Get(kstring)(interface{},bool){mapData:self。Driver。GetData()val,ok:mapData〔k〕returnval,ok}erasefunc(selfCacheImpl)Del(kstring){self。Driver。EraseKVPair(k)}hasfunc(selfCacheImpl)Has(kstring)bool{mapData:self。Driver。GetData(),ok:mapData〔k〕returnok}Map实现的内存驱动typeMapContainerstruct{datamap〔string〕interface{}}创建数据channerfuncNewMapContainer()MapContainer{returnMapContainer{data:make(map〔string〕interface{})}}func(thisMapContainer)PushKVPair(k,vinterface{})Containerer{ifkey,ok:k。(string);!ok{panic(key必须是string类型!)}else{this。data〔key〕v}returnthis}func(thisMapContainer)Exist(kinterface{})bool{returntrue}func(thisMapContainer)EraseKVPair(kinterface{})Containerer{ifkey,ok:k。(string);!ok{panic(key必须是string类型!)}else{delete(this。data,key)}returnthis}func(thisMapContainer)PushKVMaps(maps。。。map〔string〕interface{})Containerer{for,itemMap:rangemaps{foritemKey,itemValue:rangeitemMap{this。PushKVPair(itemKey,itemValue)}}returnthis}func(thisMapContainer)ResetKVPair(kstring,vinterface{})Containerer{if,ok:this。data〔k〕;ok{this。data〔k〕v}returnthis}func(thisMapContainer)ResetOrAddKVPair(kstring,vinterface{})Containerer{this。data〔k〕vreturnthis}func(thisMapContainer)ResetKVPairs(kvMapsmap〔string〕interface{})Containerer{fork,v:rangekvMaps{if,ok:this。data〔k〕;ok{this。data〔k〕v}}returnthis}func(thisMapContainer)ResetOrAddKVPairs(kvMapsmap〔string〕interface{})Containerer{fork,v:rangekvMaps{this。data〔k〕v}returnthis}func(thisMapContainer)GetData()map〔string〕interface{}{returnthis。data}
  到此一个基础Memory类型的驱动就构建完成,我们也可以通过这个模型去构建redis、mysql等等驱动实现自定义缓存。

硬壳阅读及答案参考我们无数次地吃过鸡蛋,但很少有人亲眼看见过小鸡雏从蛋壳里钻出来的场面。那一年,我领着女儿到农村去,恰巧遇见了老乡家里的母鸡在孵小鸡。那是一只芦花色的母鸡,趴在土炕(kng……帮助的同义词跟造句帮助,指以出钱、出力或出主意的方式相助别人。以下是小编为大家搜集整理提供到的帮助的同义词跟造句,希望对您有所帮助。欢迎阅读参考学习!一、同义词佐理,匡助,协助,协理……最新的高中数学教学反思范文高中生在数学课堂里看不懂、听不懂的到底约占百分之几十几?我认为,只要不是一个县、市的一流学校,这个百分数要超过70!这绝不是危言耸听!就是完完全全放弃了数学学习的也超过30!这……九年级英语上册Unitsampnbsp1315导学案九年级units1315基础知识巩固i词组1)aimat瞄准;针对2)forinstance例如;比如3)attimes有时;偶尔4)tos……识字7优秀的教学设计1、学会本课生字和由生字组成的词语。2、通过观察图画体会字意初步了解象形字、会意字的构字特点,激发学习汉字的兴趣。3、能正确、流利、有感情地朗读背诵课文。第一……在马克思墓前的讲话教学设计案例教材分析:这篇悼词中,恩格斯代表全世界的无产阶级对马克思的伟大贡献进行了论述,并运用记叙抒情,叙述逝世情形,表达哀悼崇敬。全文层次清晰,结构谨严,显示了强大的逻辑力量。准……找找小动物教案活动目标:1、发展边走边运球的动作及提高手脚协调能力。2、体验玩球游戏的乐趣。活动准备:小动物图片若干、皮球人手一只。活动过程:一、自由玩球……哪吒闹海教学反思范文《哪吒闹海》是一篇流传千古的神话故事,讲了哪吒为民着想,不畏强暴,大闹东海,制服东海龙王父子,使人民又过上了安定的生活。本文教学的重点是指导学生正确、流利、有感情地朗读课文,因……眼睛和眼镜说课稿参考各位老师:您们好!我今天讲的课题是人教版《物理》八年级上册第三章第四节《眼睛和眼镜》。我主要从以下三个方面去说:教材分析、目标定位、教学流程我首先要说的是教材……找春天教案和反思收获导语:教案是教师为顺利而有效地开展教学活动,根据课程标准,教学大纲和教科书要求及学生的实际情况,下面由小编为大家整理的找春天教案和反思收获,希望可以帮助到大家!教学目标……幼儿园数学教案投球比赛篇一:30个超有意思的幼儿园小班体育游戏30个超有意思的幼儿园小班体育游戏游戏1:小猪回家游戏规则:幼儿用双手滚球,不能踢球或拿球跑。游戏玩法:幼儿双手……大海一年级音乐课教案大海一年级音乐课教案设计理念:《大海》是一首以表现无边无际的大海为主题的儿童歌曲,它借助其他姊妹艺术融诗、画、音乐为一体,让学生欣赏各种形态海的画面时,在充满海的品……
白水漈阅读题练习及参考答案几个朋友伴我游白水漈(j水边,指瀑布)。这也是个瀑布;但是太薄了,又太细了。有时(甲)着些许的白光:等你定睛看去,却又没有只剩下一片飞烟而已。从前有所谓雾谷,大概就是这样……特斯拉拒绝向拼多多团购车主交付Model3,称不符合交付政策8月14日下午消息,新浪科技独家获悉,特斯拉已经拒绝向拼多多团购车主交付Model3,来自特斯拉的交付专员声称这一活动不符合特斯拉的交付政策。一位来自武汉的车主提供的信息……微博推出集卡开红包活动,最高金额2020元IT之家1月14日消息在支付宝推出了集五福活动之后,新浪微博也宣布推出新年开运卡活动。官方称网友只需要在除夕夜18点之前集齐健康、平安、招财、高升、桃花、开挂六类开运卡,就能在……拼音教案设计活动目标:1、感知d的正确发音并正确认读。2、运用语音盒中的物品与字卡对应游戏,感知汉字与拼音。3、练习组词造句、创编故事,提高语言表达能力及语言组织能力。……嘀嗒上线顺风车标准研究集思会,首期议题为合乘关系嘀嗒出行近日宣布联合中国交通运输协会共享出行分会等,开展顺风车行业标准课题研究,为政府治理提供决策参考。为了顺风车行业标准课题研究的开展,课题组推出顺风车行业标准课题研究集思会……嘀嗒出行与深圳公安局达成合作建立安全审核体系5月10日午间消息,嘀嗒出行与深圳市公安局近日举行协议合作签约仪式,深圳市公安局情报处处长敬渭清、嘀嗒出行副总裁李跃军就出行安全、背景核查、信息安全等方面进行深度交流,达成重要……用物以类聚造句用物以类聚造句1、他们几个都对火箭有兴趣,所以物以类聚,成立了火箭社。2、阿德里恩:那正是我害怕的。物以类聚,尤其是疯子,你自己尽情玩吧!3、物以类聚,人以群……儿童和平条约精彩教案教材分析:这篇课语言是1986年9月25日在美国纽约,由世界各国的儿童代表分别代表本国儿童其同签定的一项公约,表达了世界儿童渴望和平的美好心愿,条约一开头就点明了未来的世……滴滴在日本推出高端叫车服务,可乘雷克萨斯LS600奔驰S级IT之家11月18日消息据滴滴官方消息,滴滴将于11月22日在日本推出名为DiDipremium的全新高端叫车服务,可以打到雷克萨斯LS600和奔驰S级。viaDiDiM……媒体三大运营商将逐步取消不限量套餐IT之家8月2日消息此前IT之家报道,根据一份中国电信集团公司公布的《关于调整电信畅享套餐的通知》文件,中国电信从即日起,开始切换达量降速版畅享套餐至普通版畅享套餐,并最晚于8……菏泽某小区被运营商断网,铁塔致歉很为难,既想要信号又不想建基IT之家7月28日消息近日,山东菏泽。网曝一小区内因部分业主阻挠通讯基站建设,三大运营商发出公告,不再对该小区的通信设施建设列支投资计划。小区一位物业工作人员介绍,小区附近的基……时隔9个月,成都断网小区仍有20用户反对恢复基站IT之家7月28日消息去年10月份,成都郫都区一小区内外手机信号突然减弱甚至消失。据了解,当初运营商在该小区要建立基站时,该小区部分用户认为基站有辐射,拒绝运营商在自家小区进行……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网