.net core系列之《.net core中使用集成IDistributedCache接口的Redis和MongoDB实现分布式缓存》
分布式的缓存可以提高性能和可伸缩性的 ASP.NET Core 应用程序,尤其是托管在云中或服务器场中时。
什么是分布式的缓存
分布式的缓存由多个应用程序服务器共享,缓存中的信息不存储在单独的 Web 服务器的内存中,并且缓存的数据可用于所有应用服务器。这具有几个优点:
1、所有 Web 服务器上的缓存数据都是一致的。(用户不会因处理其请求的 Web 服务器的不同而看到不同的结果。)
2、缓存的数据在 Web 服务器重新启动后和部署后仍然存在。 (删除或添加单独的 Web 服务器不会影响缓存。)
3、对数据库的请求变的更少 。
像其它缓存一样,分布式缓存可以显著提高应用的响应速度,因为通常情况下,数据从缓存中检索比从关系数据库(或 Web 服务)中检索快得多。
缓存配置是特定于实现的。 本文介绍如何配置 Redis、 mongoDB 和 SQL Server 分布式缓存。 无论选择哪一种实现,应用都使用通用的 IDistributedCache 接口与缓存交互。
IDistributedCache 接口
IDistributedCache 接口包含同步和异步方法。 接口允许在分布式缓存实现中添加、检索和删除项。 IDistributedCache 接口包含以下方法:
public interface IDistributedCache
{
//采用字符串键并以byte[]形式检索缓存项(如果在缓存中找到)。
byte[] Get(string key);
Task<byte[]> GetAsync(string key, CancellationToken token = default(CancellationToken));
//根据键刷新缓存中的项,并重置其过期超时的值(如果有)。
void Refresh(string key);
Task RefreshAsync(string key, CancellationToken token = default(CancellationToken));
//根据键删除缓存项。
void Remove(string key);
Task RemoveAsync(string key, CancellationToken token = default(CancellationToken));
//使用字符串键向缓存中以byte[] 形式添加项
void Set(string key, byte[] value, DistributedCacheEntryOptions options);
Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = default(CancellationToken));
}
使用分布式的 Redis 缓存
Redis是一种开源的内存中数据存储,通常用作分布式缓存。可以在本地使用它,也可以在服务器使用它,在这里,我将把redis服务器安装在liunx上
1、打开NuGet包管理工具搜索并安装 Microsoft.Extensions.Caching.Redis 包,或者在程序包管理控制台输入 PM> Install-Package Microsoft.Extensions.Caching.Redis 然后安装并配置redis服务器
2、接下来我们来看看怎么使用Redis:
static void Main(string[] args)
{
RedisCache redisCache = new RedisCache(new RedisCacheOptions() {
Configuration="192.168.254.134:6379",
InstanceName="test"
});
redisCache.SetString("key","value"); var val = redisCache.GetString("key");
Console.WriteLine(val);
Console.ReadKey();
}
结果如下:

接下来我们来看看 RedisCache 类里面到底是什么:
public class RedisCache : IDistributedCache, IDisposable
{
//此处逻辑省略
}
根据上面代码可以看出,他正是继承了 IDistributedCache 接口
使用分布式的 MongoDB
MongoDB 是一个基于分布式文件存储的数据库
1、打开NuGet包管理工具搜索并安装 MarkCBB.Extensions.Caching.MongoDB Microsoft.Extensions.Caching.Redis 包,或者在程序包管理控制台输入 PM> Install-Package MarkCBB.Extensions.Caching.MongoDB 然后安装并配置mongoDB服务器
2、接下来我们来看看怎么使用MongoDB:
static void Main(string[] args)
{
MongoDBCache mongoDBCache = new MongoDBCache(new MongoDBCacheOptions()
{
ConnectionString = "mongodb://192.168.254.135:27017",
DatabaseName = "sample",
CollectionName = "sample"
}); mongoDBCache.Set("username", Encoding.UTF8.GetBytes("jack"), new DistributedCacheEntryOptions()
{
AbsoluteExpiration = DateTime.Now.AddDays()
}); var info = mongoDBCache.GetString("username");
Console.WriteLine(info); Console.ReadKey();
}
结果如下:

接下来我们来看看 MongoDBCache 类里面到底是什么:
public class MongoDBCache : IDisposable, IDistributedCache
{
//此处逻辑省略
}
由上可知,它们都是实现了 IDistributedCache 接口
.net core系列之《.net core中使用集成IDistributedCache接口的Redis和MongoDB实现分布式缓存》的更多相关文章
- .net core系列之《.net core内置IOC容器ServiceCollection》
一.IOC介绍 IOC:全名(Inversion of Control)-控制反转 IOC意味着我们将对象的创建控制权交给了外部容器,我们不管它是如何创建的,我们只需要知道,当我们想要某个实例时,我们 ...
- Asp.Net Core 内置IOC容器的理解
Asp.Net Core 内置IOC容器的理解 01.使用IOC容器的好处 对接口和实现类由原来的零散式管理,到现在的集中式管理. 对类和接口之间的关系,有多种注入模式(构造函数注入.属性注入等). ...
- net core体系-web应用程序-4net core2.0大白话带你入门-8asp.net core 内置DI容器(DependencyInjection,控制翻转)的一点小理解
asp.net core 内置DI容器的一点小理解 DI容器本质上是一个工厂,负责提供向它请求的类型的实例. .net core内置了一个轻量级的DI容器,方便开发人员面向接口编程和依赖倒置(IO ...
- NET Core 3.0 AutoFac替换内置DI的新姿势
原文:NET Core 3.0 AutoFac替换内置DI的新姿势 .NET Core 3.0 和 以往版本不同,替换AutoFac服务的方式有了一定的变化,在尝试着升级项目的时候出现了一些问题. 原 ...
- 浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】
原文:浏览器扩展系列----给MSTHML添加内置脚本对象[包括自定义事件] 使用场合: 在程序中使用WebBrowser或相关的控件如:axWebBrowser等.打开本地的html文件时,可以在h ...
- 简单讲解Asp.Net Core自带IOC容器ServiceCollection
一. 理解ServiceCollection之前先要熟悉几个概念:DIP.IOC.DI.Ioc容器: 二. 接下来先简单说一下几个概念问题: 1.DIP(依赖倒置原则):六大设计原则里面一种设计原 ...
- ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件
应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用. ASP.NET ...
- asp.net core 内置DI容器的一点小理解
DI容器本质上是一个工厂,负责提供向它请求的类型的实例. .net core内置了一个轻量级的DI容器,方便开发人员面向接口编程和依赖倒置(IOC). 具体体现为Micorosoft.Extensio ...
- 学习笔记:GLSL Core Tutorial – Vertex Shader(内置变量说明)
1.每个Vertex Shader都有用户定义的输入属性,例如:位置,法线向量和纹理坐标等.Vertex Shaders也接收一致变量(uniform variables). uniform vari ...
- .net core 2.0学习记录(三):内置IOC与DI的使用
本篇的话介绍下IOC和ID的含义以及如何使用.Net Core中的DI. 一.我是这么理解IOC和DI的: IOC:没有用IOC之前是直接new实例来赋值,使用IOC之后是通过在运行的时候根据配置来实 ...
随机推荐
- (转) Linux 内核运行参数修改——sysctl命令
原文:https://blog.csdn.net/u012707739/article/details/78254241 sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目 ...
- Linux系统编程:socket网络编程(操作篇)
一.问题思考 问1.网络通信应用在什么场合?通信的前提是什么? 答1.主要应用在不同主机进程间的互相通信,同一主机的进程也可以使用网络进行通信.通信的前提是如何标识通信进程的唯一,由于不同主机的进程极 ...
- 一次java导出pdf的经历
近期由于工作需要,需要将html代码导入到pdf中,经过了几种pdf的方案对比后发现IText是最简单和便捷的一种方式,于是乎采用了Itext. PDF生成 第一步:导入Maven依赖 <!-- ...
- 微服务Kong(二)——快速入门
在本节中,您将学习如何管理您的KONG实例.首先,我们将指导您如何启动Kong,以便您能访问KONG的RESTful形式的管理界面,您可以通过它来管理您的API,consumers等.通过管理型API ...
- scrapyd远程连接配置
安装scrapyd: pip install scrapyd 默认scrapyd启动是通过scrapyd就可以直接启动,bind绑定的ip地址是127.0.0.1端口是:6800,这里为了其他主机可以 ...
- 入门系列之使用fail2ban防御SSH服务器的暴力破解攻击
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由SQL GM发表于云+社区专栏 介绍 对于SSH服务的常见的攻击就是暴力破解攻击--远程攻击者通过不同的密码来无限次地进行登录尝试.当 ...
- Weblogic Maven
从weblogic 10.3.4开始支持maven deploy部署 步骤如下: 1.构建weblogic-maven-plugin jar 在D:\oracle\Middleware\wlser ...
- [转]jQuery ListBox Plugin(ListBox插件)
本文转自:http://www.cnblogs.com/think8848/archive/2011/09/28/2193990.html 转载请注明作者(think8848)和出处(http://t ...
- Devexpress GridView增加CheckBox列
参考DEV官网代码做了一个增加checkbox列效果: #region 方法:设置GridView数据绑定 public void GridDataBind() { ...
- 使用k8s创建容器一直处于ContainerCreating状态
容器报错信息为(两种): FailedSynError syncing pod, skipping: failed to {kubelet 127.0.0.1} Warning FailedSync ...