ASP.NET Core中如何使用MemoryCache类缓存和读取用户列表
问题1:获取Users类型的列表数据
你只需要把Get方法的泛型参数替换为List<Users>,同时使用你提前约定好的、对应用户列表的缓存键即可,示例代码如下:
// 示例缓存键约定为"All_Users_List",可根据自身业务规则自定义 List<Users> usersList = _memoryCache.Get<List<Users>>("All_Users_List");
如果未命中缓存,上述代码返回的结果为null。
问题2:列表未缓存时的存入操作
你可以直接调用Set方法手动写入缓存,同时支持配置绝对过期时间、滑动过期时间等缓存策略,示例如下:
// 第一步:未命中缓存时,先从业务数据源查询用户列表 List<Users> usersFromDb = _dbContext.Users.ToList(); // 第二步:写入缓存,示例配置为绝对过期时间10分钟 _memoryCache.Set("All_Users_List", usersFromDb, TimeSpan.FromMinutes(10));
更推荐使用内置的GetOrCreate/GetOrCreateAsync方法简化逻辑,不需要手动判断缓存是否存在,框架会自动处理「缓存命中直接返回、未命中则执行委托逻辑写入缓存再返回」的流程:
// 同步写法 var usersList = _memoryCache.GetOrCreate("All_Users_List", cacheEntry => { // 配置缓存过期策略 cacheEntry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10); // 执行查询逻辑返回要缓存的数据 return _dbContext.Users.ToList(); }); // 异步写法 var usersList = await _memoryCache.GetOrCreateAsync("All_Users_List", async cacheEntry => { cacheEntry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10); return await _dbContext.Users.ToListAsync(); });
内容的提问来源于stack exchange,提问作者Pouria sh
相关产品推荐
相关产品推荐

