专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

干掉RedisHelper,请这样用分布式缓存

  前言
  我们在项目中使用Redis时通常是写一个单例模式的RedisHelper静态类,暴露一些常用的Get、Set等操作,在需要使用地方直接RedisHelper。StringGet(xx,xx)就可以了,这样虽然简单粗暴地满足我们对Redis的所有操作需要,但是这在Asp。NetCore的项目显得不是那么优雅了。首先你的RedisHelper静态类无法使用Asp。NetCore容器,又如何优雅的通过依赖注入获取IConfiguration中的配置项呢?既然我们使用Asp。NetCore这么优秀的框架,最佳实践当然就是遵循官方建议的开发规范优雅的编写代码。IDistributedCache
  若要使用SQLServer分布式缓存,请添加对Microsoft。Extensions。Caching。SqlServer包的包引用。
  若要使用Redis分布式缓存,请添加对Microsoft。Extensions。Caching。StackExchangeRedis包的包引用。
  若要使用NCache分布式缓存,请添加对NCache。Microsoft。Extensions。Caching。OpenSource包的包引用。
  无论选择哪种实现,应用都将使用IDistributedCache接口与缓存进行交互。
  来看下IDistributedCache这个接口的定义namespaceMicrosoft。Extensions。Caching。Distributed;summaryRepresentsadistributedcacheofserializedvalues。summarypublicinterfaceIDistributedCache{summaryGetsavaluewiththegivenkey。summarybyte〔〕?Get(stringkey);summaryGetsavaluewiththegivenkey。summaryTaskbyte〔〕?GetAsync(stringkey,CancellationTokentokendefault(CancellationToken));voidSet(stringkey,byte〔〕value,DistributedCacheEntryOptionsoptions);summarySetsthevaluewiththegivenkey。summaryTaskSetAsync(stringkey,byte〔〕value,DistributedCacheEntryOptionsoptions,CancellationTokentokendefault(CancellationToken));summaryRefreshesavalueinthecachebasedonitskey,resettingitsslidingexpirationtimeout(ifany)。summaryvoidRefresh(stringkey);summaryRefreshesavalueinthecachebasedonitskey,resettingitsslidingexpirationtimeout(ifany)。summaryTaskRefreshAsync(stringkey,CancellationTokentokendefault(CancellationToken));summaryRemovesthevaluewiththegivenkey。summaryvoidRemove(stringkey);summaryRemovesthevaluewiththegivenkey。summaryTaskRemoveAsync(stringkey,CancellationTokentokendefault(CancellationToken));}
  IDistributedCache接口提供以下方法来处理分布式缓存实现中的项:Get、GetAsync:如果在缓存中找到,则接受字符串键并以byte〔〕数组的形式检索缓存项。Set、SetAsync:使用字符串键将项(作为byte〔〕数组)添加到缓存。Refresh、RefreshAsync:根据键刷新缓存中的项,重置其可调到期超时(如果有)。Remove、RemoveAsync:根据字符串键删除缓存项。干掉RedisHelper
  官方不仅提出了如何最佳实践分布式缓存的使用,还提供了基本的实现库给我们直接用,比如我们在项目中用Redis为我们提供缓存服务:添加引用Microsoft。Extensions。Caching。StackExchangeRedis注册容器AddStackExchangeRedisCache,并配置参数builder。Services。AddStackExchangeRedisCache(options{options。Configurationbuilder。Configuration。GetConnectionString(MyRedisConStr);options。InstanceNameSampleInstance;});在需要使用Redis的地方通过构造函数注入IDistributedCache实例调用即可
  这样就可以优雅的使用Redis了,更加符合Asp。NetCore的设计风格,养成通过容器注入的方式来调用我们的各种服务,而不是全局使用RedisHelper静态类,通过IOC的方式,结合面向接口开发,能方便的替换我们的实现类,统一由容器提供对象的创建,这种控制反转带来的好处只可意会不可言传,这里就不赘述了。AddStackExchangeRedisCache到底干了什么
  上面已经知道如何优雅的使用我们的Redis了,但是不看下源码就不知道底层实现,总是心里不踏实的。
  源码比较好理解的,因为这个Nuget包的源码也就四个类,而上面注册容器的逻辑也比较简单
  AddStackExchangeRedisCache主要干的活1。启用Options以使用IOptionsservices。AddOptions();2。注入配置自定义配置,可以通过IOptionsT注入到需要使用该配置的地方services。Configure(setupAction);3。注入一个单例IDistributedCache的实现类RedisCacheservices。Add(ServiceDescriptor。SingletonIDistributedCache,RedisCache());
  所以我们在需要用Redis的地方通过构造函数注入IDistributedCache,而它对应的实现就是RedisCache,那看下它的源码。
  这里就不细看所有的实现了,重点只需要知道它继承了IDistributedCache就行了,通过AddStackExchangeRedisCache传入的ConnectionString,实现IDistributedCache的Get、Set、Refresh、Remove四个核心的方法,我相信这难不倒你,而它也就是干了这么多事情,只不过它的实现有点巧妙。
  通过LUA脚本和HSET数据结构实现,HashKey是我们传入的InstanceNamekey,做了一层包装。
  源码中还有需要注意的就是,我们要保证Redis连接对象IConnectionMultiplexer的单例,不能重复创建多个实例,这个想必在RedisHelper中也是要保证的,而且是通过lock来实现的。
  然而微软不是那么用的,玩了个花样,注意下面的connectionLock。Wait();:privatereadonlySemaphoreSlimconnectionLocknewSemaphoreSlim(initialCount:1,maxCount:1);〔MemberNotNull(nameof(cache),nameof(connection))〕privatevoidConnect(){CheckDisposed();if(cache!null){Debug。Assert(connection!null);return;}connectionLock。Wait();try{if(cachenull){if(options。ConnectionMultiplexerFactorynull){if(options。ConfigurationOptionsisnotnull){connectionConnectionMultiplexer。Connect(options。ConfigurationOptions);}else{connectionConnectionMultiplexer。Connect(options。Configuration);}}else{connectionoptions。ConnectionMultiplexerFactory()。GetAwaiter()。GetResult();}PrepareConnection();cacheconnection。GetDatabase();}}finally{connectionLock。Release();}Debug。Assert(connection!null);}
  通过SemaphoreSlim限制同一时间只能有一个线程能访问connectionLock。Wait();后面的代码。
  学到装逼技巧1思考
  IDistributedCache只有四个操作:Get、Set、Refresh、Remove,我们表示很希望跟着官方走,但这个接口过于简单,不能满足我的其他需求咋办?
  比如我们需要调用StackExchange。Redis封装的LockTake,LockRelease来实现分布式锁的功能,那该怎么通过注入IDistributedCache调用?
  我们可以理解官方上面是给我们做了示范,我们完全可以自己定义一个接口,比如:publicinterfaceIDistributedCachePlus:IDistributedCache{boolLockRelease(stringkey,byte〔〕value);boolLockTake(stringkey,byte〔〕value,TimeSpanexpiry);}
  继承IDistributedCache,对其接口进行增强,然后自己实现实现AddStackExchangeRedisCache的逻辑,我们不用官方给的实现,但是我们山寨官方的思路,实现任意标准的接口,满足我们业务。services。Add(ServiceDescriptor。SingletonIDistributedCachePlus,RedisCachePlus());
  在需要使用缓存的地方通过构造函数注入IDistributedCachePlus。总结
  官方提供的IDistributedCache标准及其实现类库,能方便的实现我们对缓存的简单的需求,通过遵循官方的建议,我们干掉了RedisHelper,优雅的实现了分布式Redis缓存的使用,你觉得这样做是不是很优雅呢?
  原文链接:https:www。cnblogs。comspringhguip16290803。html

同业委外火了有的规模几千亿!银行理财子公司出手中国基金报记者李树超实习生周倬睿在今年上半年权益市场巨震背景下,银行理财遭受重创多家银行理财产品提前终止运作银行理财大面积破净密集下调业绩比较基准等,刚步入理财产品净值化元年的银行2022年A股还有机会吗?GDP5。5的目标还能实现吗?这几年,疫情肆虐中美摩擦,台海局势不明确,欧美市场通胀加剧,欧洲能源危机加剧,市场出现了激烈的波动。对于投资者来说,市场的波动是一直存在的,只是A股的波动似乎总是那么大,让很多投资LPR下调后提前还贷划算吗?购房者还需从这几方面做考量听说这两天房贷利率又降了,我到底要不要提前还款呢?8月22日,1年期LPR降至3。65,5年期以上LPR降至4。3,下调了15个基点。这就意味着全国首套房贷利率最低降至4。1,创下农商行概念股价从高位47元跌至4。45元,每股净资产高达5。28元经历了一年时间的摧残,低位同时出现了黄金坑和多方炮的走势,伴随着主力资金的大量关注,拥有了直冲云霄机会。股价4。45元,每股净资产却高达5。28元。且成交量温和放大,会变盘吗?拭目油价止跌回升!国内汽油站前瞻989592号汽油预计上涨两毛每次谈到油价的时候,相信很多人都会感觉到特别的头疼,尤其是今年比往年更加令人心烦,在今年上半年石油公司的业绩增长创下了历史新高,而国内就是92号汽油更是创下的历史新高,进入到了9元如果心情压抑,就看看这些骨感金句,之后奋起努力文仙仙人民日报1很少和你说谢谢,因为觉得太过官方,但就在此时此刻好想跟你说声谢谢,谢谢你让我的人生的大多时候都觉得这个世界很美好。2世界上什么都不公平,唯独时间最公平,如果你整天这优质文案平凡生活里的小确幸生活充满着平凡的小事,而在这些细微的琐碎中,也有雨水或繁星,柔软的睡眠或恰如其分的拥抱我们总能捕捉到一些轻盈的小小喜悦。一些日常里的舒适时刻1。他一个人坐在沙发上,房里有金粉金沙深文案幸好思念无声不然震耳欲聋女人不吃挣钱的苦,就一定要吃婚姻的苦。好的婚姻不一定全靠钱,但一定离不开钱,经济独立才是一个女人最大的底气。我不会再对谁再抱期望大家都是会食言的人都是会离开我的人我只对自己抱期望我要性价比,更要强续航!2022年四款优秀的智能手机,向您诚恳推荐今天给大家推荐四款续航超长的手机!第一款红米k50至尊版手机续航内置5000毫安时锂离子聚合物电池红米今年k系列的大boss出现了,采用骁龙8处理器,游戏性能以及运行能力相比k50三星台积电决战3nm制程既分高下,也决生死近两年,全球遭遇巨大的芯片危机,各大芯片代工厂即便把所有产线的产能拉满,也难以满足市场的需求,导致芯片价格一路飙升,狂涨数十倍。台积电和三星作为目前全球排名前二的芯片代工厂,更是在预算2000元,这4款手机卷得非常凶,入手就算赚2000元是很多用户主要购买的价位段,在这个价格区间内你可以看到高性能可以各类大型游戏的手机也能看到拍照十分给力的产品,这也导致该价位段成为各大品牌手机竞技场,用户挑选时也是眼花缭想要长途自驾游,舒适座驾当属瑞风M4自动挡随着长途自驾游成为新生代年轻群体休闲放松的全新方式,一辆靠谱的出行座驾就显得尤为重要。瑞风M4自动挡不仅有着灵动舒适大空间,还有着更高的乘坐品质乘坐质感,完全能够成为用户长途自驾的结肠炎常见五大类型,中医帮你对症调理结肠炎呢,这个病是在临床上是比较常见的,我们一般把它叫做炎症性肠病,分为三种,一种是溃疡性结肠炎,一种是克罗恩病,那么还有一种就是慢性结肠炎。也就是结肠表面不光滑了,有充血,水肿,经常肠胃胀气,推荐这5个方法,或能帮你缓解胀气,不妨试试如果没有一个正确的饮食习惯,就很容易导致肠胃胀气,这几乎是每个人都会有的问题。由于许多人在肠胃胀气时,会感到非常不舒服,除了饮食不合理这个原因,胃肠功能疾病也会造成这种反应。因此,夏秋之交喝好这碗粥,祛湿不燥热顺时而养,不同的季节有不同的养生重点。说到秋天,很多人的第一反应就是秋燥,要多吃养阴润燥的食物,但在广东,时值处暑却依然高温多雨。不少朋友都觉得很疑惑,四季不分明的广东人究竟要怎样一碗隔夜饭,5天ICU?隔夜饭菜究竟能不能吃?告诉你真相一顿隔夜饭,竟然吃进了ICU?55岁的杨先生为人节俭,经常一顿饭吃不完就留着下一顿吃,这么多年也没有啥事。然而就在上个月中旬,杨先生中午午饭没吃完,还剩了许多,他就把剩饭剩菜先放厨武陵山珍养生很重要武陵山珍提示大家,养生保健很重要。健康是1其余是0。只有健康的身体才有资格谈其他的健康对于每个人来说无需质疑,绝对是重重之重的重要。谈到养生保健,大部分人的态度是什么是功能性食品?癫痫怎么治才有效果癫痫的发作让患者和家属在心理上承受着过大的精神压力,让他们备受煎熬。癫痫病很多还是后天的因素所导致的,如不规律的生活习惯,意外发生的脑部的外伤,或是某些疾病,甚至是情绪的大起大落,粉碎谣言系列之十三汤泡饭伤胃如果要问在家里最方便的做饭方式,除了煮方便面,那就属汤泡饭了。很多上班族日常工作忙,下班回家后为了图方便,喜欢做汤泡饭,这不仅是处理剩菜剩饭的好方法,还能省时省力。在汤泡饭备受大家我,90后江西人,两次独自骑行西藏,总时长162天,行程9750公里这是我们讲述的第735位真人的故事我是小苏环华骑行小苏,90后江西赣州人,骑行达人。我曾在深山养过猪,也曾给宠物治过病,但都不符合我对工作的预期。于是通过自学,成为了一名广告人。工又又又挖到了!牧野营地里藏着你向往的诗和远方!摄影刘银刚大自然总有种莫名的吸引力,身处其中,我们能够化繁为简,拥有最自在朴素的生活。天为罗帐地为毡,星斗虫鸣伴我眠。这样的诗意去哪里找?抓住暑假的小尾巴,去牧野营地,放下匆忙和疲西藏东达山垭口,既是人间天堂,也是生命禁区,有人终生不能前往318公路被誉为中国最美的景观公路,沿途经过平原丘陵山地峡谷高原等地形地貌,成都到拉萨一段浓缩了这条公路最精华的景观。318公路进入西藏自治区之后翻越多个垭口,海拔最高的是位于昌都
指控C罗性侵的女子再次上诉,她曾要求C罗赔偿5650万英镑今年6月,美国内华达洲法官驳回了美国女子马约尔加对C罗的指控,这位女性在2009年报案称,C罗在酒店内对她进行了性侵。但这起长达13年的案件并未就此画上句号,北京时间8月21日早间曼联球迷谈安东尼逼迫球队放行不太好看,而且不确定他的状态直播吧8月21日讯据最新消息,为尽快提升球队的即战力,扭转颓势,曼联方面加大了追求阿贾克斯前锋安东尼的力度,目前球员也已经采取罢训的方式来促成转会曼联。曼联球迷对于近期球队的转会操27岁朱婷名气有多大?意甲球队门面,年薪100万欧,中国女排第1人近日意大利斯坎迪奇俱乐部公布了球队的最新海报,从海报中可以看到,在新赛季即将到来之际,球队将朱婷看得非常重,朱婷作为海报的新人物,英姿飒爽,为中国女排争了脸面,意大利女排联赛在海外4换3报价尼克斯,湖人这盘棋活了,球迷激动呐喊詹姆斯夺冠稳了湖人队现在同意利用威少和两个首轮签交易欧文被拒绝之后,他们把目光瞄准了步行者和尼克斯,最初他们是想得到蓝短,但是现在他们胃口变得越来越大,打算对现在的阵容进行一个加强,是据美国竞技凌晨0点!天津媒体曝争议猛料中国排球遭致命打击,球迷吐槽声一片北京时间8月21日凌晨0点,中国排球传来最新消息,日前,天津媒体今晚报曝出争议猛料,他们表示中国U18男排在亚洲锦标赛出局,他们以2比3惜败韩国男排无缘4强,而这样的糟糕也引来了很正式离队!广东宏远内线大将离开,启用年轻球员,朱芳雨不留情面北京时间8月21日,广东宏远这个休赛期迎来大调整,为了精简球队阵容,朱芳雨对广东宏远进行大清理,连宏远前任队长周鹏都没有例外,这个休赛期离队的球员可不仅仅周鹏,还有其他一些球员。从蔡斌高兴早了,中国女排获胜事出有因,亚洲杯第一目标恐难实现今天在亚洲杯首场比赛当中,中国队迎来了韩国队的挑战,当然韩国队的整体实力确实太弱了,这次韩国队去参加亚洲杯完全就是采混日子,全队平均年龄只有17岁,是整个亚洲杯当中平均年龄最小的球11连胜遇上11轮不败,山东泰山迎大黑马,球迷小心当年的3413轮过后,山东泰山落后武汉三镇4分,排在积分榜第二的位置。第14轮,11连胜的山东泰山遇上了11轮不败的大黑马。这场比赛的胜负对于山东泰山来说非常重要,必须谨记当年在30的情况下7年过去了,当初克里米亚选择并入俄罗斯,老百姓幸亏选对了海上的船舶如要靠岸停留,就需要港口,但春夏季节气候宜人,船只尚能停靠,可一旦进入冬季,满目萧瑟不说,近岸海水还容易结冰,这就给船只停靠带来了大问题。可地球上偏偏就真有永不结冰的港口健康养生,你做对了吗?健康养生心得一学会和自己的身体沟通。当下不少年轻人过劳现象严重,年纪轻轻三高心梗甚至猝死的已不罕见,如此现象着实堪忧。所以,我们应该学会和自己的身体做朋友。听听自己的身体发出的声音通勤休闲都适合夏季百搭平底鞋除了各种各样的高跟鞋,平底鞋肯定也有一批忠实粉丝,舒适又百搭,出门也能走长路,比起高跟鞋也要更随性一些!1蝴蝶结平底鞋鞋型秀气线条感十足,尖尖的鞋尖配上手工烫钻打造的蝴蝶结造型,气不喝酒,坚持运动,为什么尿酸还升高?辟谣尿酸高都是吃出来的有的人尿酸水平偏高,从此以后严格限制饮食,吃得像苦行僧,可是尿酸还是不降,有的人生活很健康,结果还是查出高尿酸,百思不得其解,不是说尿酸高都是吃出来的吗?自己已经管住嘴巴了,为何还央行原行长戴相龙由美国引发的全球金融风险正不断扩大8月19日,中国发展研究基金会主办的亚洲金融危机25周年的回顾与启示国际研讨会在北京召开。中国人民银行原行长戴相龙在主旨演讲中表示,由美国引发的全球金融风险正在不断扩大。防范和化解追梦格林要求顶薪续约,勇士管理层表示并无计划且愿意承担风险根据TheAthletic记者AnthonySalater报道,德雷蒙德格林要求顶薪续约勇士,格林的合同还有两年到期,20222023赛季的2580万美元,20232024赛季的2惊喜!苹果或仍将推出iPhone14mini近日,数码博主科技兽X曝光了一段iPhone14系列机模与保护壳的上手视频,对比iPhone14ProMax和iPhone13ProMax的保护壳可以明显看出,新机的镜头模组整整大iPhone14Pro曝光外观参数配置汇总,果粉的福音来了苹果今年终于有了大动作?目前,关于iPhone14系列的传闻还在继续,尤其是刘海将被取消的传闻也在不断得到证实。但是iPhone14改动不大依旧采用刘海屏幕设计,所以iPhone1vivo手机别乱买,这5款覆盖低端到高端。Vivo也是国内知名手机品牌。其产品从低端到高端都有。可以说从几百元到几千元的机型都有。最近有朋友给我发私信说如何选择vivo手机。为了帮助大家,我总结了四款热门的vivo手机,涵日本科技那么发达,手机却混到无人问津的地步,这其中有何隐情?日本车是国人眼中的香饽饽,很多科技产品也能找到日本生产的足迹,奇怪的是,日本生产的手机却十分少见,这是为何?难道能制造出手机的他们,做不了手机吗?说起日本品牌的产品,索尼相机丰田马原来不仅有冷暖空调,还有单冷空调!二者有何区别?该如何选择?原来不仅有冷暖空调,还有单冷空调!二者有何区别?该如何选择?大家家里使用的是什么样的空调呢?估计大多数朋友家里所使用的都是冷暖空调,冷暖空调也就是一台空调具备了制冷和制热的双重功能3款比较便宜的12256GB的手机,优点各不相同,最低仅1000第一款红米Note10Pro优势天玑1100旗舰处理器5000mAh大电池,67W有线快充价格低性能小钢炮Note10Pro搭载联发科天玑1100处理器,内置5000mAh大电池,2022年8月22日华强北手机批发报价单今日各品牌手机报价已出,欢迎查看交流评论留言,喜欢的点击关注了解手机每日走势!苹果苹果华为一加荣耀华为苹果Solo三星联想小新JBL魅族飞利浦小米红米黑鲨OPPOrealme真我摩刚刚发布的这款新机,绝对是红米杀手不得不说,自骁龙8芯片在下半年表现有所好转后。国内手机厂商最近发布的新机表现那是一个比一个猛啊!旗舰机型表现回归正常折叠屏机型更不用太担心电池续航游戏机型也不用猛堆散热,甚至做得出
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网