ASP.NET Core分布式缓存

目录

分布式缓存

概述

IDistributedCache接口中定义的主要方法及主要的扩展方法

用什么做缓存服务器

使用

封装分布式缓存操作


分布式缓存

概述

分布式系统中,内存缓存不满足要求的话,把缓存数据保存到专门的缓存服务器,所有Web应用通过缓存服务器进行缓存数据的写入和获取。

  1.  常用的分布式缓存服务器有Redis、Memcached等。
  2. .NET Core中提供了统一的分布式缓存服务器的操作接口IDistributedCache,用法和内存缓存类似。
  3. 分布式缓存和内存缓存的区别:缓存值的类型为byte[],需要我们进行类型转换,也提供了一些按照string类型存取缓存值的扩展方法。

IDistributedCache接口中定义的主要方法及主要的扩展方法

用什么做缓存服务器

  1. 用SQLServer做缓存性能并不好。
  2. Memcached是缓存专用,性能非常高,但是集群、高可用等方面比较弱,而且有“缓存键的最大长度为250字节”等限制。可以安装EnyimMemcachedCore这个第三方NuGet包。
  3. Redis不局限于缓存,Redis做缓存服务器比Memcached性能稍差,但是Redis的高可用、集群等方便非常强大,适合在数据量大、高可用性等场合使用。

使用

Install-Package Microsoft.Extensions.Caching.StackExchangeRedis

builder.Services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = "localhost";
    options.InstanceName = "cache_";//避免混乱
});

private readonly IDistributedCache distributedCache;

[HttpGet]
public async Task<ActionResult<Book?>> Test(long id)
{
    Book? book = null;
    string? s = await distributedCache.GetStringAsync("Book_" + id);
    if (s == null)
    {
        book = await ctx.Set<Book>().SingleOrDefaultAsync(o => o.Id == id);
        await distributedCache.SetStringAsync("Book_" + id, JsonSerializer.Serialize(book));
    }
    else
    {
        book = JsonSerializer.Deserialize<Book?>(s);
    }
    if (book == null)
    {
        return NotFound("不存在");
    }
    else
    {
        return Ok(book);
    }
}

封装分布式缓存操作

Install-Package Zack.ASPNETCore

NETBookMaterials/最后大项目代码/YouZack-VNext/Zack.ASPNETCore/DistributedCacheHelper.cs at main · yangzhongke/NETBookMaterialshttps://github.com/yangzhongke/NETBookMaterials/blob/main/%E6%9C%80%E5%90%8E%E5%A4%A7%E9%A1%B9%E7%9B%AE%E4%BB%A3%E7%A0%81/YouZack-VNext/Zack.ASPNETCore/DistributedCacheHelper.cshttps://github.com/yangzhongke/NETBookMaterials/blob/main/%E6%9C%80%E5%90%8E%E5%A4%A7%E9%A1%B9%E7%9B%AE%E4%BB%A3%E7%A0%81/YouZack-VNext/Zack.ASPNETCore/DistributedCacheHelper.cshttps://github.com/yangzhongke/NETBookMaterials/blob/main/%E6%9C%80%E5%90%8E%E5%A4%A7%E9%A1%B9%E7%9B%AE%E4%BB%A3%E7%A0%81/YouZack-VNext/Zack.ASPNETCore/DistributedCacheHelper.cs

//分布式缓存操作帮助类
services.AddScoped<IDistributedCacheHelper,DistributedCacheHelper>();

private readonly IDistributedCacheHelper distributedCacheHelper;

[HttpGet]
public async Task<ActionResult<Book?>> Test(long id)
{
    var book =await distributedCacheHelper.GetOrCreateAsync("Book_" + id, async (e) =>
    {
        e.SlidingExpiration = TimeSpan.FromSeconds(5);
        var book = await ctx.Set<Book>().SingleOrDefaultAsync(o => o.Id == id);
        return book;
    }, 20);
    if (book == null)
    {
        return NotFound("不存在");
    }
    else
    {
        return Ok(book);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值