.net core系列之《.net core中使用集成IDistributedCache接口的Redis和MongoDB实现分布式缓存》...

本文深入探讨分布式缓存的概念,解释其在提高ASP.NET Core应用程序性能和可伸缩性方面的作用,尤其是在云环境或服务器集群中。文章详细介绍了Redis、MongoDB和SQL Server作为分布式缓存的配置与使用方法,展示了如何通过IDistributedCache接口与缓存进行交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分布式的缓存可以提高性能和可伸缩性的 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 接口

转载于:https://www.cnblogs.com/hhzblogs/p/9723803.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值