.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之后是通过在运行的时候根据配置来实 ...
随机推荐
- MySql互为主从配置文件及配置方法
# Example MySQL config file for medium systems. # # This is for a system with little memory (32M - 6 ...
- Fedora 24 python3.5 安装M2Crypto
安装M2Crypto#python3 -m pip install M2Crypto 出现错误 gcc: /usr/lib/rpm/redhat/redhat-hardened-cc1:Nosuch ...
- Java:对象的强、软、弱和虚引用的区别
1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...
- CentOS 开启安装EPEL YUM源
我们用yum安装软件时,经常发现我们的yum源里面没有该软件,需要自己去wget,然后configure,make,make install,太折腾了. 其实,CentOS 还有一个源叫做 EPEL ...
- JavaScript数据结构-12.散列碰撞(线性探测法)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- WPF INotifyPropertyChanged
public class OrderModel:INotifyPropertyChanged { public string _oderID; public string OrderID; { get ...
- c++ 同步阻塞队列
参考:<C++11深入应用> 用同步阻塞队列解决生产者消费者问题. 生产者消费者问题: 有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之 ...
- 端口扫描工具nmap
nmap 使用介绍 nmap是目前为止最广为使用的国外端口扫描工具之一.我们可以从[url]http://www.insecure.org/[/url]进行下载,可以很容易的安装到Windows和un ...
- CSS position属性absolute relative等五个值的解释
DIV CSS position绝对定位absolute relative教程篇 常常使用position用于层的绝对定位,比如我们让一个层位于一个层内具体什么位置,为即可使用position:abs ...
- docker 常见操作
docker rm $(docker ps -a -q --filter status=exited) // 删除不在运行的 镜像