2011-02-05 43 views
6

Tôi đang cố gắng hiểu những gì sẽ là cần thiết để đi với một giải pháp như memcached. Nó có vẻ giống như một câu hỏi ngớ ngẩn - nhưng nó mang lại gì cho bàn nếu tất cả những gì tôi cần là để lưu trữ các đối tượng trong bộ nhớ cache -wont một hashmap đơn giản làm gì?lý do tại sao memcached?

Trả lời

3

Trích dẫn từ memcache web site, memcache là ...

miễn phí & mã nguồn mở, hiệu suất cao, phân phối bộ nhớ đối tượng bộ nhớ đệm hệ thống, chung chung trong tự nhiên, nhưng kế để sử dụng trong việc đẩy nhanh web động ứng dụng bằng cách giảm tải cơ sở dữ liệu.

Memcached là một trong bộ nhớ chính có giá trị cửa hàng cho khối nhỏ dữ liệu tùy ý (chuỗi, các đối tượng) từ kết quả của các cuộc gọi cơ sở dữ liệu, các cuộc gọi API, hoặc trang rendering. Memcached là đơn giản nhưng mạnh mẽ. Thiết kế đơn giản của nó khuyến khích triển khai nhanh chóng, dễ phát triển, và giải quyết nhiều vấn đề phải đối mặt với bộ nhớ cache lớn dữ liệu. API của nó có sẵn cho các ngôn ngữ phổ biến nhất.

Tại trái tim nó là một khóa đơn giản/Giá trị cửa hàng

Một từ khóa ở đây là phân phối. Nói chung, trích dẫn từ trang web memcache một lần nữa,

Máy chủ lưu trữ nói chung là không biết lẫn nhau. Không có nhiễu xuyên âm, không đồng bộ hóa, không phát sóng . Việc thiếu các liên kết có nghĩa là thêm máy chủ thường sẽ bổ sung thêm dung lượng như bạn mong đợi. Có thể có ngoại lệ đối với quy tắc này, nhưng chúng là ngoại lệ và được xem xét cẩn thận.

Tôi rất muốn khuyên bạn nên đọc số detailed description of memcache.

+2

Tôi gặp sự cố khi phân tích cú pháp "bộ nhớ đệm đối tượng bộ nhớ phân tán" ... những gì được phân phối? nếu tôi chỉ có một máy chủ web, những gì memcached cung cấp như trái ngược với chỉ là một hashmap ... có vẻ như tôi cần nó đánh vần ra :( – treefrog

2

Bạn sẽ đặt bản băm này ở đâu? Đó là những gì nó đang làm cho bạn. Bất kỳ cấu trúc nào bạn thực hiện trên PHP chỉ có cho đến khi yêu cầu kết thúc. Nếu bạn ném nội dung vào bộ nhớ cache liên tục, bạn có thể tìm lại nó cho các yêu cầu khác thay vì xây dựng lại dữ liệu.

+0

này không chỉ dành cho php, mà còn cho các công nghệ web khác mà tôi cung cấp phiên dựa lưu trữ ... – treefrog

+0

@ Dan Grossman gì nếu chúng ta bằng tay tạo một thư mục "lưu trữ", lưu trữ mọi đối tượng, một đối tượng trên mỗi tệp (và chúng tôi sử dụng các hàm serialize/deserialize php gốc để đặt/nhận các đối tượng đó). Mỗi đối tượng sẽ có thể truy cập thông qua một khóa (tên tệp) được chọn bởi nhà phát triển. Đối với khoảng 200 đối tượng, bạn có biết nếu điều đó sẽ nhanh hơn memcached? – ling

1

Sử dụng hệ thống bộ đệm được gắn cờ hoàn toàn thường cho phép bạn sao lưu bộ nhớ cache trên nhiều máy chủ hoặc chỉ chia tỷ lệ cho nhiều máy chủ để mở rộng nhiều yêu cầu song song.

2

Tôi biết rằng câu hỏi này khá cũ, nhưng ngoài việc có thể chia sẻ bộ nhớ cache trên nhiều máy chủ, còn có một khía cạnh khác không được đề cập trong các câu trả lời khác và các giá trị hết hạn.

Nếu bạn lưu trữ các giá trị trong HashMap và HashMap đó được gắn với ngữ cảnh Ứng dụng, nó sẽ tiếp tục tăng kích thước, trừ khi bạn hết hạn mục theo một số cách. Memcached hết hạn đối tượng lười biếng cho hiệu suất tối đa.

Khi một mục được thêm vào memcache, nó có thể có thời gian hết hạn, ví dụ 600 giây. Sau khi đối tượng hết hạn, nó sẽ vẫn ở đó, nhưng nếu một đối tượng khác yêu cầu nó, nó sẽ thanh lọc nó và trả về null.

Tương tự, khi bộ nhớ ghi nhớ đầy, nó sẽ tìm mục hết hạn đầu tiên có kích thước phù hợp và hết hạn nó để nhường chỗ cho mục mới. Cuối cùng, nó cũng có thể xảy ra rằng bộ nhớ cache đầy và không có bất kỳ mục nào hết hạn, trong trường hợp đó nó sẽ thay thế các mục được sử dụng ít nhất.

0

Có một (cũ) bài viết so sánh các hệ thống bộ nhớ đệm khác nhau được sử dụng bởi php: https://www.percona.com/blog/2006/08/09/cache-performance-comparison/

Về cơ bản, tập tin bộ nhớ đệm là nhanh hơn so với memcached.

Vì vậy, để trả lời câu hỏi, tôi tin rằng bạn sẽ có hiệu suất tốt hơn bằng cách sử dụng hệ thống bộ nhớ cache dựa trên tệp.

Đây là kết quả từ các cuộc thử nghiệm của bài viết:

Cache Type        Cache Gets/sec 
Array Cache        365000 
APC Cache        98000 
File Cache        27000 
Memcached Cache (TCP/IP)    12200 
MySQL Query Cache (TCP/IP)    9900 
MySQL Query Cache (Unix Socket)   13500 
Selecting from table (TCP/IP)   5100 
Selecting from table (Unix Socket)  7400 
Các vấn đề liên quan