2009-11-22 41 views
24

Tôi vừa mới bắt đầu nghĩ về việc sử dụng bộ nhớ cache cấp hai NHibernate trong một trong các ứng dụng của tôi. Tôi có lẽ sẽ sử dụng NHibernate.Caches.SysCache.SysCacheProvider mà dựa trên bộ nhớ cache ASP.net.Xóa đối tượng khỏi bộ nhớ cache cấp 2 NHibernate

Bật bộ nhớ cache không phải là vấn đề, nhưng tôi tự hỏi về cách quản lý bộ nhớ cache e. g. loại bỏ một cách có lập trình các thực thể nhất định khỏi bộ nhớ cache, v.v.

Ứng dụng của tôi là một loại cơ sở dữ liệu hình ảnh. Người dùng tải lên hình ảnh qua chương trình phụ trợ và có thể xem hình ảnh ở lối vào bằng cách truy cập /ImageDb/Show?userId=someUserId

Dữ liệu không thay đổi thường xuyên. Và nếu thay đổi, người dùng sẽ không quan trọng một nút có tên "xóa bộ nhớ cache của tôi" trong chương trình phụ trợ xóa đối tượng được lưu trong bộ nhớ cache cho người dùng này từ bộ nhớ cache.

Tôi đã tìm thấy giải pháp trực tuyến có thể xóa tất cả các đối tượng được lưu trong bộ nhớ cache từ bộ nhớ cache cấp hai nhibernates. Nhưng đó là một chút quá sức mạnh vũ phu cho tôi ... Tôi không muốn xóa toàn bộ bộ nhớ cache cho hàng chục người dùng chỉ vì một người dùng đã cố gắng xóa bộ nhớ cache cho dữ liệu của riêng mình.

Vì vậy, những gì tôi về cơ bản muốn làm: chọn lọc loại bỏ các đối tượng db được lưu trữ từ bộ nhớ cache cấp hai nhibernates trong C#.

Điều này có khả thi không? Tôi đoán nó cũng phụ thuộc vào nhà cung cấp bộ nhớ cache. Nếu điều này không thể thực hiện được với nhà cung cấp bộ nhớ cache ASP.net, tôi mở cho các đề xuất nguồn mở/được xây dựng khác.

+0

Tôi biết điều này có thể không liên quan ngay bây giờ nhưng lưu ý rằng lược đồ URI của bạn không chính xác. Nó nên là người dùng/[Id]/ImageDB/Show –

+0

@ the_drow - trừ khi ứng dụng được gọi là ImageDb :) Bạn vẫn chủ yếu là đúng, chỉ cần thay đổi ImageDB để/Hình ảnh hoặc một cái gì đó –

+0

@LukeSchafer: Tôi đã viết ImageDb chỉ vì OP sử dụng nó. –

Trả lời

40

SessionFactory cung cấp những phương pháp bạn muốn ... từ 19.3 chapter of the NHibernate reference:

Để đuổi hoàn toàn tất cả các đối tượng từ bộ nhớ cache session, gọi ISession.Clear() Đối với bộ nhớ cache thứ hai cấp, có những phương pháp được định nghĩa trên ISessionFactory để loại bỏ trạng thái được lưu trong bộ nhớ cache của một cá thể , toàn bộ lớp, thể hiện tập hợp hoặc toàn bộ vai trò bộ sưu tập.

sessionFactory.Evict(typeof(Cat), catId); //evict a particular Cat 
sessionFactory.Evict(typeof(Cat)); //evict all Cats 
sessionFactory.EvictCollection("Eg.Cat.Kittens", catId); //evict a particular collection of kittens 
sessionFactory.EvictCollection("Eg.Cat.Kittens"); //evict all kitten collections 
+68

Mèo con tội nghiệp ... –

+6

Tên vai trò ở đây trong tham số đầu tiên là Tên đầy đủ + Tên lớp + Tên thuộc tính của những gì bạn cần đuổi. Bạn có thể xem mọi thứ trong bộ nhớ cache bằng cách gọi sessionFactory.GetAllCollectionMetaData(). –

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