一文掌握 .NET Core 中的缓存
.NET Core 中的缓存是开发 Web 应用程序时经常使用的一种机制。该机制旨在缓存经常使用的数据或工作结果,从而提高应用程序的性能。本文将介绍如何在 .NET Core 应用程序中使用缓存。
一、缓存的类型
.NET core 支持两种类型的缓存:
- 内存缓存(Memory Cache):数据存储在应用程序的内存中。当应用程序重启时,缓存数据将会丢失。
- 分布式缓存(Distributed Cache):缓存数据存储在共享的内存中,例如 Redis、SQL Server 或其他云存储。
在开发过程中,应根据不同的需求选择缓存类型。
二、使用内存缓存
1.首先在 Startup.cs
文件中添加对缓存的服务注入:
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
//...
}
2.修改代码以使用缓存数据:
private readonly IMemoryCache _cache;
public Constructor(IMemoryCache memoryCache)
{
_cache = memoryCache;
}
public async Task<List<TodoItem>> GetTodoItemsAsync()
{
const string cacheKey = "TodoItems";
if (_cache.TryGetValue(cacheKey, out List<TodoItem> todoItems))
{
return todoItems;
}
// 如果缓存中不存在,则从数据库中获取数据
todoItems = await _context.TodoItems.ToListAsync();
// 将数据加入缓存
var cacheOptions = new MemoryCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
};
_cache.Set(cacheKey, todoItems, cacheOptions);
return todoItems;
}
上述代码中,我们首先定义了一个缓存键 cacheKey
,缓存键的名称可以自己定义,用于将数据缓存起来,在第二次调用时,我们通过查找缓存键来获取缓存数据。如果缓存中不存在,则从数据源(此处是数据库)获取数据,该数据源可以根据实际情况进行更改。
最后,将查询结果加入缓存中,并设置缓存过期时间。
三、使用分布式缓存
1.首先需要在 Startup.cs
文件中进行服务注入:
services.AddDistributedRedisCache(option =>
{
options.Configuration = Configuration.GetConnectionString("Redis");
options.InstanceName = "sample";
});
需要安装 Microsoft.Extensions.Caching.StackExchangeRedis
将分布式缓存集成到 Redis 中。
2.修改代码以使用缓存数据:
private readonly IDistributedCache _cache;
public Constructor(IDistributedCache distributedCache)
{
_cache = distributedCache;
}
public async Task<List<TodoItem>> GetTodoItemsAsync()
{
const string cacheKey = "TodoItems";
var cachedTodoItems = await _cache.GetAsync(cacheKey);
if (cachedTodoItems != null)
{
return JsonSerializer.Deserialize<List<TodoItem>>(
Encoding.UTF8.GetString(cachedTodoItems));
}
// 如果缓存中不存在,则从数据库中获取数据
var todoItems = await _context.TodoItems.ToListAsync();
// 将数据加入缓存
var cacheOptions = new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5),
};
await _cache.SetAsync(
cacheKey,
Encoding.UTF8.GetBytes(JsonSerializer.Serialize(todoItems)),
cacheOptions);
return todoItems;
}
上述代码中,我们使用了分布式缓存中的 Redis,首先设置了 Redis 的连接信息。然后,我们通过 GetAsync
方法来从 Redis 中获取数据。
同样,如果 Redis 中没有缓存数据则需要从数据源(这里示例中是数据库)获取数据。获取完数据后,通过使用 SetAsync
方法将数据写入 Redis。在此之前,我们将数据序列化为 JSON 格式以便于存储。
四、总结
在 .NET Core 中使用缓存可以提高应用程序的性能。缓存机制可以有效地节省应用程序的资源,同时提高了用户体验。本文介绍了两种类型的缓存:内存缓存和分布式缓存,并给出了代码示例以参考。
五、代码示例
代码示例请见该项目:https://github.com/imdhruv99/AspNetCore-Caching
六、参考资料
- Microsoft Docs: https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-5.0
- Redis Labs: https://redislabs.com/caching/
- NCache: https://www.alachisoft.com/ncache/distributed-cache.html
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文掌握.Net core中的缓存 - Python技术站