ASP.NET Core 中的分布式缓存 IDistributedCache IMemoryCache

ASP.NET Core 中的缓存内存(MemoryCache)  
ASP.NET Core 中的分布式缓存  
响应缓存在 ASP.NET Core 中的中间件  
分布式 Redis 缓存  
分布式 SQL Server 缓存  
Cache GitHub 地址  

Net Framewoke 中常用的缓存有两种: System.Runtime.Caching 和 System.Web.Caching 
NET Core 中缓存相关的类库都在:Microsoft.Extensions.Caching

无论选择哪种实现,应用都将使用 IDistributedCache 接口与缓存进行交互。

若要使用 SQL Server 分布式缓存,请添加对 Microsoft.Extensions.Caching.SqlServer 包的包引用。
若要使用 Redis 分布式缓存,请添加对 Microsoft.Extensions.Caching.StackExchangeRedis 包的包引用。
若要使用 NCache 分布式缓存,请添加对 NCache.Microsoft.Extensions.Caching.OpenSource 包的包引用。

IDistributedCache 接口
IDistributedCache 接口提供以下方法来处理分布式缓存实现中的项:
● Get、GetAsync:如果在缓存中找到,则接受字符串键并以 byte[] 数组的形式检索缓存项。
● Set、SetAsync:使用字符串键将项(作为 byte[] 数组)添加到缓存。
● Refresh、RefreshAsync:根据键刷新缓存中的项,重置其可调到期超时(如果有)。
● Remove、RemoveAsync:根据字符串键删除缓存项。

1、缓存穿透
客户度发送了id=-1000的商品id,缓存中没有,数据库也没有,即穿透,即请求了没有的数据。
解决方法:布隆过滤器,有误判率,有3%,bitMap(位数组)
2、缓存击穿:在缓存中没有,在db中有。(热点数据缓存,预热,缓存有效期过期,缓存过期,全部都去了数据查询)
解决方法1:加锁,分布式锁(setnex+lua)
解决方法2:二级缓存,线程,异步
*
*
3、缓存雪崩
解决方法:
*
*
内部缓存,外部缓存,多级缓存
局部页面(Partital Page Cache)、页面缓存(Page Cache)、数据缓存(Data Cache)
一级缓存:
二级缓存:
静态缓存:CDN 是经典代表之作,涉及的开源技术包含apache、Lighttpd、nginx、varnish、squid等。
动态缓存:

1、分布式 SQL Server 缓存
*
2、分布式 Redis 缓存
*
3、分布式内存缓存
*
4、Memory
IMemoryCache Interface  
方法
CreateEntry(Object):在缓存中创建或覆盖项。
Remove(Object):删除与给定键关联的对象。
TryGetValue(Object, Object):获取与此键关联的项(如果存在)。
扩展方法
Get(IMemoryCache, Object)
Get<TItem>(IMemoryCache, Object)
GetOrCreate<TItem>(IMemoryCache, Object, Func<ICacheEntry,TItem>)
GetOrCreateAsync<TItem>(IMemoryCache, Object, Func<ICacheEntry,Task<TItem>>)
Set<TItem>(IMemoryCache, Object, TItem)
Set<TItem>(IMemoryCache, Object, TItem, MemoryCacheEntryOptions)
Set<TItem>(IMemoryCache, Object, TItem, IChangeToken)
Set<TItem>(IMemoryCache, Object, TItem, DateTimeOffset):创建或覆盖缓存中的指定条目,并设置具有绝对过期日期的值。
Set<TItem>(IMemoryCache, Object, TItem, TimeSpan)
TryGetValue<TItem>(IMemoryCache, Object, TItem)
*
MemoryCacheOptions
MemoryCacheOptions.SizeLimit 属性:获取或设置缓存的最大大小。
*
MemoryCacheEntryOptions
MemoryCacheEntryOptions.Size 属性:获取或设置缓存项值的大小。
*
MemoryCacheEntryExtensions
MemoryCacheEntryExtensions.SetSize 方法:设置缓存项值的大小。
*
5、MemoryCacheHelper.cs 代码如下
*
*
6、管理 NuGet 程序包

Microsoft.Extensions.Caching.Memory

7、Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddMemoryCache();
}

8、Controller

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace Test.WebApi.Controllers
{
    [Route("api/config")]
    public class ConfigController : ApiControllerBase
    {
        private readonly IMemoryCache _memoryCache;

        public ConfigController(IMemoryCache memoryCache)
        {
            _memoryCache = memoryCache;
        }

        [HttpGet]
        public async Task<MsgResult> GetConfig()
        {
            _memoryCache.Get("abc");
        }
    }
}

8、Redis
管理 NuGet 程序包   Microsoft.Extensions.Caching,Microsoft.Extensions.Caching.Redis
StackExchange.Redis(免费)
ServiceStack.Redis(商业)
NewLife.Redis
CSRedisCore
*
*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值