内存缓存
JeremyJone ... 2024-6-18 大约 2 分钟
# 内存缓存
# 概述
ASP.NET 支持多个不同缓存。通过 IMemoryCache
可以创建一个简单的内存缓存,它用于在 web 服务器的内存中创建一块缓存。当服务器运行时应确保会话在使用内存中缓存时处于粘滞状态。粘滞会话确保来自客户端的后续请求都将发送到相同服务器。
内存缓存支持存储任何对象。
# 缓存准则
在使用缓存时,应确保:
- 代码应始终具有用于提取数据的回退选项,而不是依赖缓存值。
- 应当限制缓存增长。
- 缓存不应存储具有时效性的数据。
# 使用 IMemoryCache
示例代码
具体代码可以看 示例代码
因为是 ASP.NET 内置好的中间件,所以我们可以直接使用。在 Controller
中直接注入:
private readonly IMemoryCache _memoryCache;
public HomeController(IMemoryCache memoryCache)
{
_memoryCache = memoryCache;
}
1
2
3
4
5
6
2
3
4
5
6
然后修改 Index
请求:
public IActionResult Index()
{
if (!_memoryCache.TryGetValue("Entry", out DateTime date))
{
date = DateTime.Now;
var options = new MemoryCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromSeconds(5));
_memoryCache.Set("Entry", date, options);
}
ViewData["date"] = date;
return View();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
接着修改一下 Index.cshtml
视图,添加如下代码:
<span>缓存时间:</span>
<span>@ViewData["date"]</span>
<hr />
<span>当前时间:</span>
<span>@DateTime.Now</span>
1
2
3
4
5
6
7
2
3
4
5
6
7
此时运行程序,可以看到视图中显示的两个时间是一致的。刷新之后,当前时间发生变化,而缓存时间不会改变。
让我们等待5秒钟,再刷新页面,发现两个时间同时改变。这说明在 Index
中的 options
起到了作用。
SetSlidingExpiration(TimeSpan.FromSeconds(5))
的作用是使缓存数据生效时间顺延5秒钟,如果我们一直使用改数据,则它一直有效不会改变。只有当最近5秒内没有用到该数据它才会失效。
让我们继续修改代码。
添加一个删除缓存的方法:
public IActionResult Clear()
{
// 清空缓存
_memoryCache.Remove("Entry");
return RedirectToAction("Index");
}
1
2
3
4
5
6
7
2
3
4
5
6
7
同时修改视图,添加一个清除按钮:
<a class="btn btn-primary" asp-action="Clear">清除缓存</a>
1
再次运行,当我们点击按钮之后,缓存直接会被清空,两个时间会再次一致。
# 更多
更多内容可以参照 官方文档