2009-06-02 31 views
14

Ehcache có hỗ trợ đa luồng theo mặc định hay không yêu cầu bất kỳ thay đổi cấu hình nào? Trên đa luồng ứng dụng của tôi với Ehcache tôi thấy rằng số lượt truy cập DB thực sự tăng lên tức là không có bộ nhớ cache toàn cục nào có sẵn cho tất cả các chuỗi mặc dù thực tế là bộ nhớ cache của tôi là tất cả các Singletons. Bất kỳ đề xuất?Ehcache & MultiThreading

Trả lời

11

Điều này có thể giúp trả lời câu hỏi của bạn, từ the FAQ:

Có chủ đề an toàn để thay đổi các giá trị phần tử sau khi phục hồi từ một bộ nhớ cache?

Hãy nhớ rằng giá trị trong phần tử bộ nhớ cache có thể truy cập trên toàn cầu từ nhiều chuỗi. Nó vốn không phải là chủ đề an toàn để sửa đổi giá trị. Sẽ an toàn hơn khi truy lục giá trị, xóa phần tử bộ nhớ cache và sau đó lắp lại giá trị.

(nhấn mạnh thêm bởi tôi)

+1

Một tùy chọn khác là xem API khóa rõ ràng ehcache: http://ehcache.org/documentation/explicitlocking.html, vì bất kỳ cuộc thảo luận nào về ehcache và đa luồng có lẽ không hoàn chỉnh mà không xem xét khía cạnh này. –

1

Từ official documentation xuất hiện nó được xây dựng đặc biệt và thử nghiệm để chạy tốt dưới quyền truy cập cao đồng thời, miễn là bạn không sửa đổi Element từ nhiều luồng .

Nhưng, tất nhiên, điều này không có nghĩa là sử dụng Ehcache làm cho các phần khác của chuỗi mã của bạn an toàn. Nếu bạn lấy cùng một giá trị từ nhiều luồng (sử dụng cùng một khóa), cá thể có thể được chia sẻ và bạn cần phải biết bạn đang làm gì trước khi sửa đổi nó. Tốt nhất là sử dụng các đối tượng bất biến như chuỗi như các giá trị được lưu trong bộ nhớ cache.

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