如何在 ASP.Net Core 使用 分布式缓存

ASP.Net Core 提供了多种类型的缓存,除了内存缓存响应缓存之外,还提供了对 分布式缓存 的支持。在之前的一篇文章中,我讨论了 ASP.Net Core 的内存缓存。在本文中,我们将讨论如何在 ASP.Net Core 中使用分布式缓存,本篇就拿 Redis 和 SQL Server 作为演示。

什么是分布式缓存

分布式缓存 可用于提高应用程序的性能和可伸缩性,通常 分布式缓存 被多个应用服务器共享,在分布式缓存中,缓存的数据不会落在某些个别的web服务器内存中,这些缓存数据采用集中化存储,这样多个应用服务器都可以直接使用,这样做的好处在于,如果任何一个服务器宕机或者停止响应,其他的服务器仍然能够检索缓存的数据。分布式缓存的另一个优点是,缓存的数据在服务器重启后仍然存在,当你的应用集群扩展时,并不会对缓存服务器造成任何影响。

要想在 ASP.NET Core 中使用分布式缓存,需要用到 IDistributedCache 接口,在下一节中,我们将会一起讨论 IDistributedCache 和 IMemoryCache 接口的区别。

IDistributedCache 接口

在.Net Core 中用于分布式缓存的 IDistributedCache 接口要比 单机版的 IMemoryCache 接口更复杂,先来看一下 IMemoryCache 接口定义。


public interface IMemoryCache : IDisposable
{bool TryGetValue(object key, out object value);ICacheEntry CreateEntry(object key);void Remove(object key);
}

IDistributedCache 接口是为 web farm 场景设计的, 它包含了一组同步和异步方法,可用于对缓存的 Add,Remove,Retrieve 操作,下面是 IDistributedCache 接口的定义。


public interface IDistributedCache
{byte[] Get(string key);Task<byte[]> GetAsync(string key);void Set(string key, byte[] value, DistributedCacheEntryOptions options);Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options);void Refresh(string key);Task RefreshAsync(string key);void Remove(string key);Task RemoveAsync(string key);
}

有一点值得注意,上面的 Set 方法的 value 仅支持 byte[],有点坑哈,当然你要塞入 string 的话, 不用担心,ASP.NET Core 也提供了扩展方法对其进行支持.

如何使用 Redis 作为缓存介质

可以通过 Nuget 来安装如下扩展包,代码如下:


Install-Package Microsoft.Extensions.Caching.Redis

为了能够把 Redis 作为应用底层缓存,需要使用 AddDistributedRedisCache() 扩展方法,下面的代码展示了如何去配置:


public void ConfigureServices(IServiceCollection services)
{services.AddMvc();services.AddDistributedRedisCache(option =>{option.Configuration ="localhost";option.InstanceName ="IDG";});
}

如何注入到 Controller

下面的代码清单展示了如何将 IDistributedCache 注入到 Controller 中并实现从 Redis 中进行插入和读取。


public class DefaultController : Controller
{private readonly IDistributedCache _distributedCache;public HomeController(IDistributedCache distributedCache){_distributedCache = distributedCache;}[HttpGet]public async Task<string> Get(){var cacheKey ="IDG";var data = _distributedCache.GetString(cacheKey);if (!string.IsNullOrEmpty(data)){return data; //returned from Cache}else{string str ="Hello World";_distributedCache.SetString(cacheKey, str);return str;}}
}

如何使用 SqlServer 作为缓存介质

要想将 SqlServer 作为底层的缓存介质,需要通过 Nuget 安装如下包:


Install-Package Microsoft.Extensions.Caching.SqlServer
Install-Package Microsoft.Extensions.Caching.SqlConfig.Tools

如何在 Startup.ConfigureServices() 中做如下配置。

public void ConfigureServices(IServiceCollection services){services.AddControllersWithViews();services.AddDistributedSqlServerCache(x =>{x.ConnectionString = Configuration["ConnectionStrings:Default"];x.SchemaName = "dbo";x.TableName = "IDGCache";});}

接下来通过如下命令在 SqlServer 中生成 Table 来存放缓存数据,代码如下:


dotnet sql-cache create <connection string> <schema> <table>

ASP.Net Core 提供了分布式缓存的高层抽象。因此,无论底层缓存介质是 Redis 还是 SQL Server, IDistributedCache接口都提供了统一并且便捷的操控Cache的API,而且 IDistributedCache 注入到 Controller 中也是非常方便的。

译文链接:https://www.infoworld.com/article/3262990/web-development/how-to-implement-a-distributed-cache-in-aspnet-core.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

50万数据生成6位数不重复字符串_R语言系列3:高级数据管理

R语言系列3&#xff1a;高级数据管理此文内容为《R语言实战》的笔记&#xff0c;人民邮电出版社出版。从高中电脑课学VB开始&#xff0c;大一课内开始学习C&#xff0c;到后来大二为了数模学习Matlab&#xff0c;到大三为了搞深度学习自学Python&#xff0c;到研究生之初学习St…

ぁ。。。爱。。。ぁ

有一老夫妻年逾50.经济条件不错&#xff0c;理当是安享退休的时候&#xff0c;却一起到律师那要办离婚。原因是自从结婚以来&#xff0c;两人争吵不断&#xff0c;老是意见不合。个性上又南辕北辙十分不和谐。二十多年的婚姻生活&#xff0c;要不是为了孩子着想&#xff0c;早就…

python对象_查找Python对象具有的方法

您似乎可以使用此代码,将“对象”替换为您感兴趣的对象&#xff1a; object_methods [method_name for method_name in dir(object) if callable(getattr(object, method_name))] 我在this site发现它.希望这应该提供更多细节&#xff01; 对于那些获得AttributeErrors的人&am…

fcn网络训练代码_另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题...

使用 CNN 处理图像问题已经是常规操作&#xff0c;但此类方法会造成局部位置信息的损失。如何解决这个问题呢&#xff1f;来自中科院自动化所和北京中医药大学的研究者另辟蹊径&#xff0c;提出用图卷积网络解决语义分割问题。选自arXiv&#xff0c;作者&#xff1a;Yi Lu等&am…

盘点大厂的那些开源项目 - 小米科技

小米是一家以手机、智能硬件和IoT平台为核心的互联网公司&#xff0c;以智能手机、智能电视、笔记本等丰富的产品与服务。致力于让全球每个人都能享受科技带来的美好生活。“为发烧而生”是小米的产品概念。“让每个人都能享受科技的乐趣”是小米公司的愿景。小米公司应用了互联…

python做一个单项选择题系统_(完整版)python选择题word打印版

Python 单选题库 一、 python 语法基础 1 、 Python 3.x 版本的保留字总数是 A.27 B.29 C.33 D.16 2. 语言保留字的是 Python 不是 &#xff0c; 以下选项中 A while B pass C do D except 3. 以下选项中描述错误的是 &#xff0c; 程序格式框架 Python 关于 A Python 语言不采…

博主应邀参加YOCSEF虚拟化技术论坛

发布日期: 2007-11-18 中国计算机学会青年计算机科技论坛<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />CCF Young Computer Scientists & Engineers ForumYOCSEF于<?xml:namespace prefix st1 ns "urn:schema…

python中truncate的用法_在Python中操作文件之truncate()方法的使用教程

truncate()方法截断该文件的大小。如果可选的尺寸参数存在&#xff0c;该文件被截断(最多)的大小。大小默认为当前位置。当前文件位置不改变。注意&#xff0c;如果一个指定的大小超过了文件的当前大小&#xff0c;其结果是依赖于平台。注意&#xff1a;此方法不会在当文件工作…

聊聊如何构建一支自驱团队(二)

曾经有一位大佬分享他组建技术团队的心得&#xff0c;当时我问了他一个问题&#xff1a;请问你组建的团队是项目型组织&#xff0c;还是职能型组织。但是大佬似乎对于这个问题没有特别直接的回答&#xff0c;所以在这篇博客中&#xff0c;我想跟大家讨论一下这个问题。一&#…

自定义依赖注解无效_最详细的自定义Spring Boot Starter开发教程

1.前言随着Spring的日渐臃肿&#xff0c;为了简化配置、开箱即用、快速集成&#xff0c;Spring Boot 横空出世。目前已经成为 Java 目前最火热的框架了。平常我们用Spring Boot开发web应用。Spring mvc 默认使用tomcat servlet容器&#xff0c; 因为Spring mvc组件集成了spring…

问题解答集

目录 问题解答集 1 目录 2 修订历史纪录 3 1 什么是.net 4 1.1 .net的定义 4 1.2 什么是C# 4 1.3 C#与C&#xff0c;C的相同之处 5 2 有关Update程序 6 2.1 WinForm中Button控件的使用 6 2.2 将double类型的变量保留固定位数的小数部分 7 …

thinkpadt450s换键盘视频_ikbc c87 入门级有线机械键盘测评

大家好&#xff0c;我是胖虎。今天&#xff0c;写一写我当初买的第一把机械键盘「ikbc c87 茶轴」&#xff0c;非常好的入门级樱桃轴键盘&#xff0c;手感和键帽都很不错。ikbc c87 茶轴机械键盘小白&#xff0c;第一款入门级机械键盘买什么&#xff1f;这款ikbc c87和高斯 87C…

如何在 ASP.Net Core 中使用 条件中间件

ASP.Net Core 是微软开源的跨平台、可扩展、轻量级的模块化框架&#xff0c;可用于构建高性能的web应用程序。中间件组件可以注入到 ASP.Net Core 请求管道中实现对 Request 和 Response 的定制和修改。ASP.Net Core 中间件可以用于检查、路由或者修改流转于Pipeline的Request和…

solidity payable_以太坊区块链搭建与使用(五)-智能合约Solidity

一、智能合约Solidity开发工具1、remix-ide http://remix.ethereum.org/ 在线版本&#xff0c;也可以去github下载安装到本地。开发、编译、发布、执行、测试2、remix-ide-cn http://remix.hubwiz.com/ 在线中文版本&#xff0c;也可以去github下载安装到本地。支持开发、编译、…

Disable anchor tag的javascript代码(兼容IE和Firefox)

对于anchor tags(<a></a>)&#xff0c;IE支持一个非标准的"disabled"属性&#xff0c;但支持也不完善&#xff0c;比如&#xff0c;如果这个anchor tage没有 "href" 值&#xff0c;IE会把这个anchor设置为灰色&#xff0c;当然不能点击&#x…

大气校正后的ndvi_大气校正常见错误处理方法及校正后检查

本文汇总了ENVI FLAASH大气校正模块中常见的错误&#xff0c;并给出解决方法&#xff0c;分为两部分&#xff1a;运行错误和结果错误。前面是错误提示及说明&#xff0c;后面是错误解释及解决方法。FLAASH对输入数据类型有以下几个要求&#xff1a;1、波段范围&#xff1a;卫星…

dotnet cli 5.0 新特性——dotnet tool search

dotnet cli 5.0 新特性——dotnet tool searchIntro.NET 5.0 SDK 的发布&#xff0c;给 dotnet cli 引入了一个新的特性&#xff0c;dotnet tool search&#xff0c;主要用于搜索 Nuget 上的 dotnet tool&#xff0c;这个命令会搜索 tool 的名称以及一些元数据&#xff0c; tit…

localhost 已拒绝连接_MySQL连接错误:Access denied for #x27;root#x27;@#x27;localhost#x27;

问题描述&#xff1a;笔者在Mac安装MySQL&#xff0c;但是当我连接到localhost本地服务器却被拒绝mysql -u root -p(1045, "Access denied for user rootlocalhost (using password: YES)")根据MySQL的反馈&#xff0c;可以得知&#xff0c;我输入的root密码应该不对…

汇率升值与通货膨胀

[注]:本文首发于我的个人博客——FantasySoft&#xff08;个人博客所在的服务器IP被封&#xff0c;郁闷中&#xff09; 花了一个下午时间&#xff0c;总算搬过来了&#xff0c;欢迎各位光临&#xff01; 12月5日&#xff0c;为期三天的中央经济工作会议在北京闭幕。接着&#x…

ncl 添加点shp文件_气象编程 | NCL高效快速精准提取不规则区域内的格点数据

添加新云天气象主编微信或QQ&#xff1a;130188121&#xff0c;及时获取或发布气象升学、就业、会议、征稿及学术动态等信息&#xff01;通常情况下&#xff0c;要获取某个区域内的格点数据&#xff0c;如果要求不是很高&#xff0c;直接采取矩形框挑选方法——即锁定所需范围内…