Cache Tag Helper trong ASP.NET Core MVC
Bởi Peter Kellner
Cache Tag Helper cung cấp khả năng cải thiện hiệu suất ứng dụng ASP.NET Core của bạn bằng cách cache nội dung vào bộ nhớ đệm (cache provider) nội bộ của ASP.NET Core.
Để có cái nhìn tổng quan về Tag Helpers, xem Tag Helpers trong ASP.NET Core.
Markup Razor sau cache ngày giờ hiện tại:
<cache>@DateTime.Now</cache>
Request đầu tiên đến page chứa Tag Helper hiển thị ngày giờ hiện tại. Các request tiếp theo hiển thị giá trị đã được cache cho đến khi cache hết hạn (mặc định 20 phút) hoặc cho đến khi ngày giờ đã cache bị đẩy ra khỏi cache.
Các thuộc tính của Cache Tag Helper
expires-after
| Kiểu thuộc tính | Ví dụ | Mặc định |
|---|---|---|
TimeSpan | @TimeSpan.FromSeconds(120) | — |
expires-after đặt khoảng thời gian từ thời điểm request đầu tiên để cache nội dung.
Ví dụ:
<cache expires-after="@TimeSpan.FromSeconds(120)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>enabled
| Kiểu thuộc tính | Ví dụ | Mặc định |
|---|---|---|
| Boolean | true, false | true |
enabled xác định liệu nội dung bao quanh bởi Cache Tag Helper có được cache hay không. Mặc định là true. Nếu đặt là false, output được render không được cache.
Ví dụ:
<cache enabled="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>expires-on
| Kiểu thuộc tính | Ví dụ |
|---|---|
DateTimeOffset | @new DateTime(2025,1,29,17,02,0) |
expires-on đặt ngày hết hạn tuyệt đối cho cache item.
Ví dụ sau cache nội dung của Cache Tag Helper cho đến 5:02 PM ngày 29 tháng 1 năm 2025:
<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>expires-sliding
| Kiểu thuộc tính | Ví dụ |
|---|---|
TimeSpan | @TimeSpan.FromSeconds(60) |
Đặt thời gian mà một cache entry sẽ bị đẩy ra nếu giá trị của nó không được truy cập.
Ví dụ:
<cache expires-sliding="@TimeSpan.FromSeconds(60)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>Mặc định là 30 giây nếu expires-after và expires-on không được định nghĩa.
priority
| Kiểu thuộc tính | Ví dụ | Mặc định |
|---|---|---|
CacheItemPriority | High, Low, NeverRemove, Normal | Normal |
priority cung cấp hướng dẫn đẩy cache cho cache provider tích hợp. Web server đẩy các cache entry Low trước tiên khi bị áp lực bộ nhớ.
Ví dụ:
<cache priority="High">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>Thuộc tính priority không đảm bảo mức độ lưu giữ cache cụ thể. CacheItemPriority chỉ là gợi ý. Đặt thuộc tính này thành NeverRemove không đảm bảo rằng các cache item luôn được giữ lại.
Cache Tag Helper phụ thuộc vào memory cache service. Cache Tag Helper thêm service nếu chưa được thêm.
vary-by
| Kiểu thuộc tính | Ví dụ |
|---|---|
| String | @Model |
vary-by cho phép tùy chỉnh dữ liệu nào được cache. Khi đối tượng được tham chiếu bởi giá trị chuỗi của thuộc tính thay đổi, nội dung của Cache Tag Helper được cập nhật. Thường thì một chuỗi nối của các giá trị model được gán cho thuộc tính này. Điều này dẫn đến một kịch bản mà việc cập nhật bất kỳ giá trị nối nào vô hiệu hóa cache.
Ví dụ sau giả sử controller method render view tính tổng giá trị integer của hai route parameters, myParam1 và myParam2, và trả về tổng như single model property. Khi tổng này thay đổi, nội dung của Cache Tag Helper được render và cache lại.
Action:
public IActionResult Index(string myParam1, string myParam2, string myParam3)
{
int num1;
int num2;
int.TryParse(myParam1, out num1);
int.TryParse(myParam2, out num2);
return View(viewName, num1 + num2);
}Index.cshtml:
<cache vary-by="@Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>vary-by-cookie
| Kiểu thuộc tính | Ví dụ |
|---|---|
| String | .AspNetCore.Identity.Application, .AspNetCore.Identity.Application,HairColor |
vary-by-cookie chấp nhận danh sách tên cookie được phân tách bằng dấu phẩy, kích hoạt làm mới cache khi giá trị cookie thay đổi.
Ví dụ sau theo dõi cookie liên kết với ASP.NET Core Identity. Khi người dùng được xác thực, sự thay đổi trong Identity cookie kích hoạt làm mới cache:
<cache vary-by-cookie=".AspNetCore.Identity.Application">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>vary-by-culture
| Kiểu thuộc tính | Ví dụ | Mặc định |
|---|---|---|
| Boolean | true, false | false |
vary-by-culture biến đổi kết quả cache theo culture của request. Đặt thuộc tính thành true có nghĩa là kết quả được biến đổi theo CultureInfo.CurrentCulture và CultureInfo.CurrentUICulture.
Ví dụ:
<cache vary-by-culture="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>vary-by-header
| Kiểu thuộc tính | Ví dụ |
|---|---|
| String | User-Agent, User-Agent,content-encoding |
vary-by-header chấp nhận danh sách giá trị header được phân tách bằng dấu phẩy, kích hoạt làm mới cache khi chúng thay đổi.
Ví dụ sau theo dõi giá trị header User-Agent. Ví dụ cache nội dung cho mỗi User-Agent khác nhau được trình bày cho web server:
<cache vary-by-header="User-Agent">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>vary-by-query
| Kiểu thuộc tính | Ví dụ |
|---|---|
| String | Make, Make,Model |
vary-by-query chấp nhận danh sách Keys được phân tách bằng dấu phẩy trong query string (Query), kích hoạt làm mới cache khi giá trị của bất kỳ key nào trong danh sách thay đổi.
Ví dụ sau theo dõi các giá trị của Make và Model. Ví dụ cache nội dung cho mỗi Make và Model khác nhau được trình bày cho web server:
<cache vary-by-query="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>vary-by-route
| Kiểu thuộc tính | Ví dụ |
|---|---|
| String | Make, Make,Model |
vary-by-route chấp nhận danh sách tên route parameter được phân tách bằng dấu phẩy, kích hoạt làm mới cache khi giá trị route data parameter thay đổi.
Ví dụ:
Startup.cs:
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");Index.cshtml:
<cache vary-by-route="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>vary-by-user
| Kiểu thuộc tính | Ví dụ | Mặc định |
|---|---|---|
| Boolean | true, false | false |
vary-by-user chỉ định liệu cache có được reset khi người dùng đã đăng nhập (hoặc Context Principal) thay đổi hay không. Người dùng hiện tại còn được biết là Request Context Principal và có thể được xem trong Razor view bằng cách tham chiếu @User.Identity.Name.
Ví dụ sau theo dõi người dùng hiện tại đã đăng nhập để kích hoạt làm mới cache:
<cache vary-by-user="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>Sử dụng thuộc tính này duy trì nội dung trong cache qua chu kỳ đăng nhập và đăng xuất. Khi giá trị là true, chu kỳ xác thực vô hiệu hóa cache cho người dùng đã xác thực. Cache bị vô hiệu hóa vì một giá trị cookie duy nhất mới được tạo khi người dùng được xác thực. Cache được duy trì cho trạng thái ẩn danh khi không có cookie nào hiện diện hoặc cookie đã hết hạn. Nếu người dùng không được xác thực, cache được duy trì.