.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(1) }); var info = mongoDBCache.GetString("username"); Console.WriteLine(info); Console.ReadKey(); }
结果如下:
接下来我们来看看 MongoDBCache 类里面到底是什么:
public class MongoDBCache : IDisposable, IDistributedCache { //此处逻辑省略 }
由上可知,它们都是实现了 IDistributedCache 接口
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- 分布式缓存技术redis学习系列(五)——spring-data-redis与JedisPool的区别、使用ShardedJedisPool与spring集成的实现及一致性哈希分析
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
- .net core系列之《.net core中使用MySql以及Dapper》
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【四】——实现模型工厂,依赖注入以及格式配置
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【六】——实现资源间的关联
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【四】——实现模型工厂,依赖注入以及格式配置
- [Silverlight入门系列]使用MVVM模式(7):ViewModel的INotifyPropertyChanged接口实现
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序实现继承
- 使用Nginx Lua实现redis高性能http接口
- [Asp.net 开发系列之SignalR篇]专题四:使用SignalR实现发送图片
- 使用jetty和mongodb实现简易网盘接口
- [Asp.net 开发系列之SignalR篇]专题六:使用SignalR实现消息提醒
- Redis for .NET 系列之实现分页需求
- [11] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序实现继承
- 在Asp.Net下使用couchbase实现分布式缓存
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【五】——在Web Api中实现Http方法(Put,Post,Delete)
- 使用scrapy,redis, mongodb实现的一个分布式网络爬虫
- C++再学习系列:使用合理的引用参数实现接口的自说明