2009-12-08 25 views
6

Vì vậy, tôi có một quá trình chạy vào nửa đêm, thiết lập điểm bắt đầu và điểm kết thúc cho đối tượng flash. Điều này chỉ cần chạy một lần một ngày, vì vậy tôi rõ ràng là bộ nhớ đệm bộ kết quả.Xóa bộ nhớ cache tại một thời điểm cụ thể trong ASP.NET 2.0

Tuy nhiên, vấn đề tôi đang gặp phải là, nếu dữ liệu vẫn được lưu trữ sau khi midnite, nó không kéo dữ liệu chính xác nhất, cho đến khi bộ nhớ cache hết hạn.

Tôi về cơ bản cần bộ nhớ cache hết hạn lúc 11:59:59 tối, để lúc 12:00 sáng, dữ liệu chính xác.

Tôi đoán phụ thuộc vào bộ nhớ cache SQL trên bảng Tôi đang kéo dữ liệu từ lý tưởng, tuy nhiên tôi chưa bao giờ thiết lập điều đó trước đó.

Có cách nào để yêu cầu bộ nhớ cache xóa một mục cụ thể ở chính xác giữa thời gian không?

Xin cảm ơn các bạn!

--Absolute Hết hạn ---

Tôi nghĩ rằng tôi đã nhận nó:

DateTime expireWeights = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59, 999); 
Cache.Insert("CacheItemName", itemToCache, null, expireWeights, System.Web.Caching.Cache.NoSlidingExpiration); 
+0

+1 câu hỏi thú vị. Tôi cũng quan tâm đến câu trả lời. – Saar

+1

absoluteExpiration là một DateTime, không phải là một delta. Xem câu trả lời của tôi dưới đây. – RickNZ

+0

Đừng quên chọn câu trả lời ... – RickNZ

Trả lời

5

Bạn có thể đặt thời gian tuyệt đốiMở rộng đối tượng Bộ nhớ cache, là một Ngày giờ.

Bạn cũng có thể kết hợp một absoluteExpiration với SqlCacheDependency.

Về vấn đề không kéo dữ liệu mới khi bộ nhớ cache hết hạn: bạn có thể kết nối CacheItemRemovedCallback để nhận thông báo khi hết hạn và làm mới bộ nhớ cache tại thời điểm đó.

+0

vì vậy một cái gì đó như thế này? Ngày giờ expireWeights = new DateTime (DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59, 999); Cache.Insert ("CacheItemName", danh sách, null, expireWeights, System.Web.Caching.Cache.NoSlidingExpiration); –

+1

Chắc chắn, ngoại trừ tôi sẽ sử dụng UtcNow thay vì Bây giờ và tôi sẽ sử dụng một trường hợp duy nhất của nó thay vì tạo ba cái khác nhau. – RickNZ

1

Nếu bạn nhìn here, dưới "phụ thuộc Time-based", nó cho thấy làm thế nào để thiết lập các mục sắp hết hạn tại một thời điểm cụ thể. Đó là những gì bạn đang tìm kiếm?

+0

Không thực sự. Các phụ thuộc dựa trên thời gian không tuyệt đối. Tôi không thể nói rõ ràng chính xác Midnite, tôi chỉ có thể nói "xóa nó trong 10 phút, hoặc 2 giờ" đúng không? –

+1

Một liên kết tốt hơn sẽ là: http://msdn.microsoft.com/en-us/library/4y13wyk9.aspx - tuy nhiên bạn sẽ phải tính toán DateTime chính xác mỗi khi bạn chèn mục, ngày hôm nay, thời gian của 23:59:59, và đảm bảo rằng bạn đặt TimeSpan thành 'Cache.NoSlidingExpiration' –

+0

@JackM: Ok, nhưng nếu bạn biết thời gian hiện tại, bạn có thể tính số phút tối thiểu cho đến nửa đêm. Ngoài ra, những gì Zhaph nói về NoSlidingExpiration là chính xác. –

3

Tôi không hiểu tại sao bạn gặp sự cố với thời hạn tuyệt đối? Bạn có thể chỉ ra datetime chính xác trong đó item sẽ hết hạn từ cache. Do đó, dòng mã sau đây sẽ chèn "myObject" vào bộ nhớ đệm dưới khóa "MyKey" và sẽ hết hạn vào nửa đêm vào ngày hôm sau (Bất kể khi nào nó vào bộ đệm).

Cache.Insert("MyKey", myObject, null, DateTime.Today.AddDays(1), TimeSpan.Zero); 
+0

Tôi đoán sự nhầm lẫn của tôi là nếu bạn đang thêm ngày, nếu nó được nhập vào lúc 1 giờ chiều, nó sẽ hết hạn vào ngày hôm sau lúc 1 giờ –

+0

Có, nếu bạn thêm Ngày vào DateTime.Now thì có, nhưng nếu bạn thêm Ngày vào DateTime .Hôm nay nó đã bị tước đi thời gian nghỉ. –

+0

Hoặc có thể DateTime.Today.AddSeconds (86399) để nhận được 23:59:59? Dunno. Có vẻ như kéo ngày tháng hiện tại và năm từ DateTime.UtcNow có thể là một chút sạch hơn. Thực sự là kết quả cuối cùng, mặc dù. – RickNZ

Các vấn đề liên quan