欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > .NET Core 内置的一个简单易用的内存缓存

.NET Core 内置的一个简单易用的内存缓存

2025/2/23 1:35:41 来源:https://blog.csdn.net/Metal1/article/details/144205183  浏览:    关键词:.NET Core 内置的一个简单易用的内存缓存

为了构建一个通用的缓存类,可以封装 Microsoft.Extensions.Caching.Memory 的功能,提供更加友好的接口来缓存软件系统中的各种数据。下面是一个简单的例子,展示了如何创建这样一个缓存类,并说明了如何使用它。

缓存类定义

using Microsoft.Extensions.Caching.Memory;
using System;public class AppCache
{private readonly IMemoryCache _cache;public AppCache(IMemoryCache cache){_cache = cache;}// 泛型方法用于缓存任何类型的对象public void Set<T>(string key, T value, TimeSpan? expiration = null){var options = new MemoryCacheEntryOptions();if (expiration.HasValue){options.SetAbsoluteExpiration(expiration.Value);}else{// 默认过期时间,例如1小时options.SetAbsoluteExpiration(TimeSpan.FromHours(1));}_cache.Set(key, value, options);}// 尝试获取缓存值,如果不存在则返回默认值public T GetOrDefault<T>(string key){return _cache.Get<T>(key) ?? default(T);}// 检查缓存中是否存在指定键public bool Exists(string key){return _cache.TryGetValue(key, out _);}// 从缓存中移除指定键public void Remove(string key){_cache.Remove(key);}// 清空所有缓存项public void Clear(){foreach (var item in _cache.Compact(1.0)){// Compact 方法会尝试释放尽可能多的空间,参数是0到1之间的小数,表示希望释放的比例。// 这里我们传入1.0,意味着尽可能地清除所有的缓存。}}
}

使用示例

假设我们有一个需要频繁查询用户信息的应用程序,我们可以利用上述 AppCache 类来缓存这些信息,以减少数据库的负载和提高响应速度。

注册服务

首先,在 Startup.cs 中注册 IMemoryCacheAppCache

public void ConfigureServices(IServiceCollection services)
{services.AddMemoryCache();services.AddSingleton<AppCache>(provider => new AppCache(provider.GetService<IMemoryCache>()));// 其他服务配置...
}
控制器或服务中使用缓存

接下来,在控制器或其他服务中使用 AppCache 来缓存用户信息:

using Microsoft.AspNetCore.Mvc;public class UserController : Controller
{private readonly AppCache _appCache;public UserController(AppCache appCache){_appCache = appCache;}public IActionResult GetUser(int userId){string cacheKey = $"user_{userId}";// 尝试从缓存中获取用户信息var user = _appCache.GetOrDefault<User>(cacheKey);if (user == null){// 如果缓存中没有用户信息,则从数据库加载user = LoadUserFromDatabase(userId);// 将用户信息存储到缓存中,设置30分钟的过期时间_appCache.Set(cacheKey, user, TimeSpan.FromMinutes(30));}return Json(user);}private User LoadUserFromDatabase(int userId){// 模拟从数据库加载用户信息// 实际应用中应替换为真实的数据库访问代码return new User { Id = userId, Name = "John Doe" };}
}// 用户实体类
public class User
{public int Id { get; set; }public string Name { get; set; }
}

在这个例子中,GetUser 方法首先尝试从缓存中读取用户信息。如果找不到对应的缓存项,它会从数据库中加载用户信息,并将其添加到缓存中,同时设置了30分钟的过期时间。这样可以确保在接下来的30分钟内对同一用户的请求可以直接从缓存中获得结果,而不需要再次访问数据库。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词