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
管理 NuGet 程序包
Microsoft.Extensions.Caching.Memory
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
}
MemoryCacheHelper.cs 代码如下
*
*
*
5、Redis
管理 NuGet 程序包 Microsoft.Extensions.Caching,Microsoft.Extensions.Caching.Redis
StackExchange.Redis(免费)
ServiceStack.Redis(商业)
NewLife.Redis
CSRedisCore
————————————————
版权声明:本文为CSDN博主「KingCruel」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/KingCruel/article/details/102580153