Asp.Net Core 轻松学-在.Net Core 使用缓存和配置依赖策略 (2)

缓存依赖的意思是表示,一个或者多个缓存依赖于某个缓存,当某个缓存过期的时候,对其有依赖条件的其它缓存也会过期,在某些应用场景下,缓存依赖非常有用

3.1 创建 TokenController 并登录后注册依赖、获取缓存、移除缓存接口

以下示例使用一个模拟用户登录/登出的业务场景

[Route("api/[controller]")] [ApiController] public class TokenController : ControllerBase { private IMemoryCache cache; public TokenController(IMemoryCache cache) { this.cache = cache; } // 创建注册依赖 [HttpGet("login")] public ActionResult<string> Login() { var cts = new CancellationTokenSource(); cache.Set(CacheKeys.DependentCTS, cts); using (var entry = cache.CreateEntry(CacheKeys.UserSession)) { entry.Value = "_x0123456789"; entry.RegisterPostEvictionCallback(DependentEvictionCallback, this); cache.Set(CacheKeys.UserShareData, "这里是共享的数据", new CancellationChangeToken(cts.Token)); cache.Set(CacheKeys.UserCart, "这里是购物车", new CancellationChangeToken(cts.Token)); } return "设置依赖完成"; } // 获取缓存 [HttpPost("getkeys")] public IActionResult GetKeys() { var userInfo = new { UserSession = cache.Get<string>(CacheKeys.UserSession), UserShareData = cache.Get<string>(CacheKeys.UserShareData), UserCart = cache.Get<string>(CacheKeys.UserCart) }; return new JsonResult(userInfo); } // 移除缓存 [HttpPost("logout")] public ActionResult<string> LogOut() { cache.Get<CancellationTokenSource>(CacheKeys.DependentCTS).Cancel(); var userInfo = new { UserSession = cache.Get<string>(CacheKeys.UserSession), UserShareData = cache.Get<string>(CacheKeys.UserShareData), UserCart = cache.Get<string>(CacheKeys.UserCart) }; return new JsonResult(userInfo); } // 过期通知 private static void DependentEvictionCallback(object key, object value, EvictionReason reason, object state) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Key:{0} 已过期,依赖于该 Key 的所有缓存都将过期而处于不可用状态", key); Console.ForegroundColor = ConsoleColor.Gray; } }

上面的代码使用 CancellationTokenSource 用作事件通知源,当移除 CacheKeys.DependentCTS 并触发 CancellationTokenSource.Cancel() 方法后,将异步触发 DependentEvictionCallback(object key, object value, EvictionReason reason, object state)委托;此时,托管程序收到一个通知,用户已登出,已移除用户相关缓存,任何移除接口尝试再次读取 CacheKeys 项,此时,返回值为空

3.2 运行程序,分别调用 login/getkeys/logout 接口,分别得到以下输出结果

login 登录后注册依赖

Asp.Net Core 轻松学-在.Net Core 使用缓存和配置依赖策略

getkeys 获取缓存

Asp.Net Core 轻松学-在.Net Core 使用缓存和配置依赖策略

logout 移除缓存,尝试再次读取 CacheKeys 项,此时,返回值为空

Asp.Net Core 轻松学-在.Net Core 使用缓存和配置依赖策略

控制台输出移除通知(黄色字体部分信息)

Asp.Net Core 轻松学-在.Net Core 使用缓存和配置依赖策略

可以看到,在用户登录登出这个业务场景下,使用缓存依赖项对其相关缓存进行管理,还是非常方便的,当用户退出登录后,即清空其所有相关缓存

结束语

本文通过实例介绍了 IMemoryCache 的简单使用方法

针对单个缓存键,也可以对其进行应用策略

通过使用缓存依赖策略,可以在某些业务场景中有非常好的应用体验

注意:当使用全局缓存策略 SizeLimit 时,每个键都需要设置一个大小

IMemoryCache 依赖于托管服务器等内存,一旦重启,缓存数据将立即被释放

示例代码下载

https://files.cnblogs.com/files/viter/Ron.MemoryCacheDemo.zip

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwfsy.html