277
Chương 7: ASP.NET và Web Form
// Lưu giữ ObjectToCache nếu nó được sử dụng ít nhất
// một lần mỗi 10 phút (với khóa là "Catalog").
// DateTime.MaxValue cho biết "không sử dụng absolute expiration".
Cache.Insert("Catalog", ObjectToCache, null,
DateTime.MaxValue, TimeSpan.FromMinutes(10));
Bạn có thể lấy các item từ cache bằng tên khóa. Tuy nhiên, bạn phải luôn kiểm tra trước xem
item có tồn tại hay không và rồi ép nó thành kiểu như mong muốn.
Khi thêm các đối tượng vào cache, cách tốt nhất là tạo một hàm độc lập có thể tái tạo đối
tượng khi cần. Ví dụ, nếu đang lưu giữ một
DataSet
, bạn cần tạo một hàm kiểm tra cache và
chỉ truy vấn lại cơ sở dữ liệu khi không tìm thấy
DataSet
. Điều này cho phép bạn tránh đi
phần xử lý tốn nhiều thời gian nhất—truy vấn cơ sở dữ liệu—trong khi vẫn cho phép mã lệnh
của bạn thay đổi hiển thị (chẳng hạn, người dùng yêu cầu sắp thứ tự) hoặc thực hiện các hành
động khác.
Ví dụ dưới đây sẽ hiển thị một bảng chứa thông tin về khách hàng được lấy từ một
DataSet
.
Phần then chốt là lớp
CustomerDatabase
, đóng gói các chức năng cần thiết để đổ dữ liệu vào
DataSet
và quản lý cache. Vì lớp này không thừa kế từ
Page
nên nó cần sử dụng thuộc tính
tĩnh
HttpContext.Current
để lấy tham chiếu đến đối tượng
Cache
.
using System;
using System.Data;
using System.Web;
using System.Configuration;
using System.Diagnostics;
using System.Web.Caching;
using System.Data.SqlClient;
public class CustomerDatabase {
private string connectionString;
// Lấy tham chiếu đến đối tượng Cache.
private Cache cache = HttpContext.Current.Cache;
public CustomerDatabase() {
// Lấy chuỗi kết nối từ file Web.config.
connectionString =
ConfigurationSettings.AppSettings["NorthwindCon"];
}