2010-01-15 42 views
7

Sau khi tạo bằng chứng khái niệm cho trang ASP.NET MVC và đảm bảo việc tách mối quan tâm thích hợp đã được đặt ra, tôi nhận thấy rằng tôi đang thực hiện rất nhiều cuộc gọi cơ sở dữ liệu dư thừa thông tin về người dùng hiện tại.Caching dữ liệu người dùng để tránh các chuyến đi cơ sở dữ liệu dư thừa

Trong lịch sử máy tính để bàn và dịch vụ, ý tưởng đầu tiên của tôi là lưu vào bộ nhớ cache kết quả db trong một số static giây. Nó đã không mất nhiều tìm kiếm để thấy rằng làm điều này sẽ tồn tại dữ liệu của người dùng hiện tại trên toàn bộ AppDomain cho tất cả người dùng.

Tiếp theo, tôi đã nghĩ đến việc sử dụng HttpContext.Current. Tuy nhiên, nếu bạn đặt nội dung ở đây khi người dùng đăng xuất, thì khi họ đăng nhập vào dữ liệu đã lưu trong bộ nhớ cache của bạn sẽ lỗi thời. Tôi có thể cập nhật điều này mỗi lần đăng nhập/đăng xuất xảy ra nhưng tôi không thể nói nếu điều này cảm thấy đúng. Trong trường hợp không có ý tưởng khác, đây là nơi tôi đang nghiêng.

Cách nhẹ nhất để lưu trữ chính xác chi tiết người dùng và tránh phải thực hiện tấn cuộc gọi cơ sở dữ liệu là gì?

+0

Bạn cần lưu trữ loại dữ liệu nào? Nếu nó chỉ là một vài thuộc tính đơn giản tức là Strings, Integers thì bạn chỉ có thể lưu trữ trong cookie biểu mẫu. – willbt

Trả lời

5

là Nếu thông tin bạn muốn bộ nhớ cache là mỗi người dùng và chỉ khi họ đang hoạt động, sau đó phiên là quyền địa điểm.
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.aspx

+0

Đây là một bài đăng tuyệt vời khác đang hoạt động ở đầu Phiên: http://stackoverflow.com/questions/343899/ – Dinah

+0

Phiên thực sự là trên mỗi phiên trình duyệt. Bạn có thể đăng nhập với tư cách người dùng khác bằng cách sử dụng cùng một trình duyệt và Trạng thái phiên được trả lại sẽ giống với người dùng trước đó. – Appetere

+0

@Steve nếu đó là trường hợp sau đó ứng dụng không xử lý đăng nhập on/off chính xác. – AUSteve

2

gì bạn đang tìm kiếm System.Web.Caching.Cache

http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

+5

Để báo MSDN "Một ví dụ của lớp này được tạo ra cho mỗi miền ứng dụng" mà không phải là những gì OP muốn. – AUSteve

+1

Tôi đang sử dụng HttpContext.Current.Cache để lưu trữ IPrincipal với FormsAuthentication. Phiên có nghĩa là một cookie khác và các vấn đề khác. – LukLed

+1

Tôi nhận thức được rằng một cá thể được tạo ra cho mỗi AppDomain nhưng có gì sai khi thêm và lấy từ bộ nhớ cache với một khóa duy nhất cho người dùng. ví dụ. Người dùng-1 trong đó 1 là Id của người dùng? Nó vẫn giải quyết được vấn đề IMO. – willbt

2

Quản lý trạng thái phiên ASP.NET là tốt cho một số trường hợp nhưng khi tải nặng được đặt, nó có xu hướng tạo tắc nghẽn trong hiệu suất ASP.NET. Đọc thêm về nó ở đây:

http://msdn.microsoft.com/en-us/magazine/dd942840.aspx

http://esj.com/articles/2009/03/17/optimize-scalability-asp-net.aspx

Các giải pháp để tránh tắc nghẽn là sử dụng bộ nhớ đệm phân tán. Có rất nhiều giải pháp bộ nhớ đệm được phân phối miễn phí trên thị trường như Memcached hoặc NCache Express.

Không biết nhiều về Memcached nhưng tôi đã sử dụng NCache Express bởi Alachisoft, nó cho phép bạn sử dụng ASP.NET bộ nhớ đệm mà không yêu cầu bất kỳ thay đổi mã.

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