Show() 动作如今应用 GetOrCreate() 办法。 GetOrCreate() 办法将检查时光戳的键值是否存在。如不雅是,现有值将被赋值给局部变量。不然,将根据第二个参数中指定的逻辑创建一个新条目并将其添加到缓存中。
为了测试此代码,请直接运行 /Home/Show,不须要跳转到 /Home/Index。你仍然会看到输出的时光戳值,因为在该值不存在的情况下,GetOrCreate() 如今是添加了它。
7. 你可以在一个缓存的数据项膳绫擎设置绝对和滚动的过不时光
在前述示例中,一个缓存项只要被添加到缓存就会一向存储,除非它被明白地应用 Remove() 大年夜缓存中移除。你也可以在一个缓存项膳绫擎设置一个绝对和滚动的过不时光。一个绝对的过时设置意味着该缓存项会在严格指定的日期和时光点被移除,而滚动过时设置则意味着它在给定的一段时光量处于余暇状况(也就是没人去拜访)之后被移除。
- MemoryCacheEntryOptions options =
- new MemoryCacheEntryOptions();
- options.AbsoluteExpiration =
- DateTime.Now.AddMinutes(1);
- options.SlidingExpiration =
- TimeSpan.FromMinutes(1);
- cache.Set<string>("timestamp",
- DateTime.Now.ToString(), options);
上述代率攀来自于修悛改的 Index() action,它创建了一个 MemoryCacheEntryOptions 的对象,然后将它的 AbsoluteExpiration 属性设置为大年夜此刻到一分钟之后的一个 DateTime 值,它还将 SlidingExpiration 属性设置为一分钟。这些值都指定了该缓存项会在一分钟之后大年夜缓存移除,不管其是否会被拜访。此外,如不雅该缓存项如初持续余暇了有一分钟,它也会被大年夜缓存中移除。
等你将 AbsoluteExpiration 和 SlidingExpiration 的值设置后, Set() 办法就可以被用来将一个数据项添加到缓存。这一次 MemoryCacheEntryOptions 对象会被作为第三个参数传递给 Set() 办法。
有时你会想要在缓存项大年夜缓存中被移除时收到通知。可能会有多种原因须要大年夜缓存中移除数据项。例如,因为明白地履行了 Remove() 办法而移除了一个缓存项, 也有可能是因为它的 AbsoluteExpiration 和 SlidingExpiration 值已经到期而被移除,诸如斯类的原因。
为了能知道项目是何时大年夜缓存移除的,你须要编写一个缓存函数。如下代码向你展示了若何去做这件工作:
- MemoryCacheEntryOptions options = new MemoryCacheEntryOptions();
- options.AbsoluteExpiration =
- DateTime.Now.AddMinutes(1);
- options.SlidingExpiration =
- TimeSpan.FromMinutes(1);
- options.RegisterPostEvictionCallback
- (MyCallback, this);
- cache.Set<string>("timestamp",
- DateTime.Now.ToString(), options);
上述代码同之前应用 MemoryCacheEntryOptions 来设备 AbsoluteExpiration 和 SlidingExpiration 的代码相当类似。加倍重要的是它也调用了 RegisterPostEvictionCallback() 办法来绑定方才评论辩论过的回调函数。在这里回调函数被定名为 MyCallback。第二个参数是一个你会想要传递给回调函数的状况对象。这里我们传入了 HomeController 的实例 (用 this 将当前的 HomeController 对象“点”出来) 作为状况对象。
前面提到的MyCallback函数,其代码如下所示: