memcache vs memcached?


76

Tôi muốn sử dụng memcached

http://www.danga.com/memcached/

Tôi đã cài đặt nó thông qua yum install memcached

Nhưng bây giờ tôi cần kết nối với PHP, và có một phần mở rộng có tên memcache và một phần có tên memcached? ARGH

http://us3.php.net/manual/en/book.memcache.php
http://us3.php.net/manual/en/book.memcached.php

Ai đó có thể chỉ cho tôi đi đúng hướng ở đây .. cái nào sẽ đi làm?

Ngoài ra, tôi có cần mở bất kỳ cổng nào để nó hoạt động mặc dù nó là cục bộ không? Sau khi chạy nó, tôi thử telnet 127.0.0.1 11211 và tôi bị từ chối kết nối.


24
Nếu bạn đang xem câu hỏi này bây giờ, xin lưu ý rằng câu trả lời được chấp nhận là sai . Chọn một giải pháp chỉ dựa trên tên là nguy hiểm, đặc biệt khi giải pháp có tên tốt hơn là một dự án tồi tệ hơn. Hãy nhìn vào các câu trả lời khác để biết thêm thông tin.
tylerl

@thanksyo vui lòng bỏ chọn câu trả lời bạn đã kiểm tra. Điều đó sẽ chỉ khiến nhiều người đến đây muộn hơn. Trong khi đó, tôi đã đánh giá thấp câu trả lời không chính xác và đề nghị những người khác làm điều tương tự cho đến khi thankyo có mặt để bỏ chọn nó.
joedevon

Câu trả lời:


24

Câu trả lời ngắn gọn: Hoặc là một trong những thứ bạn đang tìm kiếm, nhưng lựa chọn đầu tiên của tôi sẽ là memcache (cái đầu tiên bạn liệt kê), hoàn toàn dựa trên cách sử dụng danh pháp chính xác của nó.

Bây giờ đây là cách tôi đi đến kết luận đó:

Dưới đây là một nền tảng nhanh chóng trong việc đặt tên cho các quy ước (đối với những người không quen), điều này giải thích sự thất vọng của người hỏi: Đối với nhiều ứng dụng * nix, tác phẩm phụ trợ được gọi là "daemon" (nghĩ "dịch vụ" trong Windows- đất), trong khi giao diện hoặc ứng dụng khách là những gì bạn sử dụng để kiểm soát hoặc truy cập daemon. Trình nền thường được đặt tên giống như ứng dụng khách, với chữ "d" được thêm vào nó. Ví dụ: "imap" sẽ là máy khách kết nối với trình nền "imapd".

Quy ước đặt tên này rõ ràng đang được memcache tuân thủ khi bạn đọc phần giới thiệu về mô-đun memcache (chú ý phân biệt giữa memcache và memcached trong đoạn trích này):

Mô-đun Memcache cung cấp giao diện hướng đối tượng và thủ tục tiện dụng cho trình nền bộ nhớ đệm được ghi nhớ, hiệu quả cao, được thiết kế đặc biệt để giảm tải cơ sở dữ liệu trong các ứng dụng web động.

Mô-đun Memcache cũng cung cấp trình xử lý phiên (memcache).

Thông tin thêm về memcached có thể được tìm thấy tại » http://www.danga.com/memcached/ .

Sự thất vọng ở đây là do tác giả của phần mở rộng PHP bị đặt tên xấu là memcached , vì nó có cùng tên với daemon thực tế được gọi là memcached . Cũng lưu ý rằng trong phần giới thiệu về memcached (mô-đun php) , nó đề cập đến libmemcached , đó là thư viện dùng chung (hoặc API) được sử dụng bởi mô-đun để truy cập vào trình nền memcached:

memcached là một hệ thống bộ nhớ đệm đối tượng bộ nhớ phân tán, hiệu năng cao, có bản chất chung, nhưng được dùng để tăng tốc các ứng dụng web động bằng cách giảm tải cơ sở dữ liệu.

Tiện ích mở rộng này sử dụng thư viện libmemcached để cung cấp API để liên lạc với các máy chủ memcached. Nó cũng cung cấp một trình xử lý phiên (memcached).

Thông tin về libmemcached có thể được tìm thấy tại » http://tangent.org/552/libmemcached.html .

Tóm lại, cả hai đều có chức năng giống nhau, nhưng đơn giản là chúng có các tác giả khác nhau, và một cái đơn giản được đặt tên phù hợp hơn so với cái kia.


70
Có phải tên của dự án thực sự là một lý do thích hợp để chọn một triển khai khác?
David Pashley

4
David: Không hoàn toàn ... nhưng chắc chắn đủ lý do để rời khỏi một triển khai cụ thể cho đến lần cuối cùng trong thử nghiệm của tôi, do đó có hiệu quả ưu tiên cho (các) người khác. Tôi rất có thể vẫn sẽ thử tất cả các triển khai có sẵn, nhưng các lỗi kỹ thuật trong mô tả phần mềm của tác giả có xu hướng khiến tôi tự hỏi về những lỗi kỹ thuật nào có thể nằm trong phần mềm. Tôi đã đọc bình luận của bạn, mặc dù, về phần mềm thực tế, vì vậy tôi cũng đưa cho bạn một câu trả lời cho câu trả lời của bạn. :-)
Jessica McKinnon

4
Tôi chưa bao giờ nghĩ "d" trong memcached có nghĩa là deamon nhưng có nghĩa là phân từ quá khứ của bộ đệm động từ. Thêm vào đó, bạn không thể đặt tên giao diện mới là "memcache" vì đã có một giao diện với tên đó.
GetFree

9
Lượng lỗi và có hoặc không mở rộng được tích cực phát triển là nhiều hơn nữa quan trọng hơn là hậu môn về vấn đề d. Nghiêm túc mà nói, bạn thậm chí không nên nghĩ đến việc thử nghiệm một tiện ích mở rộng cuối cùng vì một thứ tương tự, nó hoàn toàn không phù hợp
Fake51

12
Erm, cả hai đều không hoạt động giống nhau: memcachedchẳng hạn, hỗ trợ mã thông báo cas, memcachekhông. Nếu bạn cần những thứ đó, bạn sẽ biết cái nào (không có tên hay không) để chọn.
Wrikken

56

Bạn có thể muốn xem So sánh máy khách PHP .

Phiên bản ngắn: Cả hai sẽ hoạt động, và trong hầu hết các trường hợp, một trong hai sẽ làm tốt.

Về vấn đề khác: Có, bạn sẽ có thể làm telnet 127.0.0.1 11211. Rất ít tường lửa sẽ chặn localhost giao tiếp với chính nó. Nếu bạn không thể kết nối, hãy xác minh rằng memcached thực sự đang chạy bằng cách thực hiện ps auxwww | grep memcached, điều này cũng sẽ hiển thị cho bạn các đối số dòng lệnh được sử dụng để bắt đầu memcached. Một trong các đối số nên -p 11211hoặc một số cổng khác. Xem man memcachedcho ý nghĩa của tất cả các đối số có thể.


2
Upvote để thêm một số bước khắc phục sự cố.
Jessica McKinnon

Đây thực sự là câu trả lời rõ ràng.
danidacar

@Nate, Windows tương đương với ps auxwww | grep memcachedcái gì?
Pacerier

1
@Pacerier: Hãy xem superuser.com/questions/415360/ . Process Explorer là cách dễ nhất để tìm một tiến trình đang chạy và xem các đối số dòng lệnh của nó.
Nate

@Pacerier kiểm tra lệnh nếu quá trình máy chủ đang chạy và xem nó được gọi như thế nào.
Jasen

27

Như liên kết của Nate cho thấy, cả hai đều hoạt động hoàn hảo cho việc sử dụng đơn giản. Tuy nhiên, memcached hỗ trợ nhiều tính năng hơn cho phép bạn có được hiệu suất cao nhất từ ​​memcached. Giao thức nhị phân làm giảm lượng dữ liệu cần thiết được gửi giữa máy khách và máy chủ. Nhiều bảng và nhiều trang cho phép bạn nhận / đặt nhiều mục cùng một lúc. Nếu bạn đang tìm kiếm bạn cần nhiều hơn từ memcache, memcached là mô-đun tốt hơn. Việc sử dụng libmemcached cho thấy rằng chính thư viện có thể được tối ưu hóa hơn phiên bản chỉ PHP.

Memcached là một mô-đun gần đây hơn so với memcache, chỉ mới được phát hành 8 tháng trước. Nếu bạn cần nhắm mục tiêu một phiên bản PHP cũ hơn, thì bạn chỉ có thể thực sự sử dụng memcache.


Giải thích tuyệt vời!
john

21

Cái cũ hơn, buggier được gọi php-memcachevì đó có vẻ là tên thích hợp nhất. Phiên bản mới hơn, tốt hơn được phát triển độc lập bởi những người ở Digg thay vào đó được đặt tên theo php-memcachedlợi ích của sự định hướng.

Những người sẽ khuyên bạn nên chọn cái khác chỉ dựa trên tính chính xác của tên thực sự không có doanh nghiệp cung cấp lời khuyên kỹ thuật.


6

Gần đây đã sử dụng php-memcache, tôi phải chỉ cho bạn sử dụng php-memcached.

Đây là một vài lý do ngoài đỉnh đầu của tôi ..

1) Không có phương thức getErrorCode () hoặc tương đương, vì vậy, nếu get () trả về FALSE, bạn sẽ không biết liệu đó có phải là vì giá trị được lưu trữ trong memcache là sai hay không, hoặc có vấn đề gì không.

2) Thuật toán băm của nó để băm nhất quán dường như khác với các triển khai khác, chẳng hạn như nhiều thư viện máy khách được xây dựng từ libmemcached. Điều này có nghĩa là nếu bạn muốn sử dụng cùng một cụm memcache với nhiều ngôn ngữ, bạn có thể sẽ gặp vấn đề trong đó bạn sẽ lưu trữ một giá trị với máy khách PHP và các máy khách khác sẽ không tìm thấy nó.


3

Cả hai đều có vấn đề như ngày hôm nay. PECL / memcache đã cũ và đáng tin cậy, với một vài trường hợp ngoại lệ khi nó bị lỗi thời. PECL / memcached 1.x là beta tốt nhất. Một số chức năng không xử lý các phím số, nó rò rỉ các kết nối khi sử dụng các kết nối liên tục. Một số (tất cả?) Đang được sửa trong GitHub và sẽ được phát hành tại một số điểm trong 2.x, nhưng không phải hôm nay. Để xem đánh giá chi tiết hơn, hãy xem http://brian.moonspot.net/php-memcached-issues


PECL / memcached 1.x hiện đã ổn định; PECL / memcache 2.x bị hạn chế; PECL / memcache 3.x rất không ổn định.
aredridel

2

Tôi đang làm việc trên một cuốn sách "Expert PHP and MySQL". Tôi đã viết khá nhiều điều tương tự về sự khác biệt. Những gì tôi đề nghị là PECL / memcached. # 1 - nó bao bọc xung quanh một thư viện C hoạt động tốt đầy đủ tính năng # 2 - nó được duy trì gần đây hơn. # 3 - nhiều tính năng hơn. Không chê bai PECL / memcache.


0

Tôi đã gặp một số vấn đề khá nghiêm trọng với Drupal 6 và php-pecl-memcached trong đó thời gian phản hồi bị trì hoãn tới 5ms mỗi cuộc gọi và sẽ khiến một trang web cụ thể tạo ra nhiều cuộc gọi hơn gấp 5 lần so với trước khi thay đổi thành php-pecl-memcached . Thay đổi thành php-pecl-memcache đã khắc phục tất cả các vấn đề; độ trễ và các cuộc gọi thêm.

Câu trả lời này chỉ có ở đây để giúp những người sử dụng Drupal 6 và có thể cả Drupal 7.


-3
  • memcache là một khách hàng của memcached (máy chủ)
  • libmemcached cũng là một khách hàng để memcached

Và còn nhiều ứng dụng khách khác để ghi nhớ, hãy xem http://code.google.com.vn/p/memcached/wiki/Clrons

Cắt và dán từ web:

http://www.php.net/manual/en/intro.memcache.php

  Memcache module provides handy procedural and object oriented 
  interface to memcached, highly effective caching daemon, which was 
  especially designed to decrease database load in dynamic web applications.
The Memcache module also provides a session handler (memcache).
More information about memcached can be found at » www.memcached.org 

http://www.php.net/manual/en/intro.memcached.php

   » memcached (http://www_memcached_org/) is a high-performance, distributed 
  memory object caching system, generic in nature, but intended for use in 
  speeding up dynamic web applications by alleviating database load.
  This extension uses libmemcached library to provide API for communicating with
  memcached servers. It also provides a session handler (memcached).
  Information about libmemcached can be found at 
   » tangent.org/552/libmemcached.html

http://pecl.php.net/package/memcached "Tiện ích mở rộng PHP để giao tiếp với memcached thông qua thư viện libmemcached" Tiện ích mở rộng này sử dụng thư viện libmemcached để cung cấp API để giao tiếp với các máy chủ memcached. https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache "phần mở rộng memcached" Memcached là một trình nền lưu trữ được thiết kế đặc biệt cho các ứng dụng web động để giảm tải cơ sở dữ liệu bằng cách lưu trữ các đối tượng trong bộ nhớ. Tiện ích mở rộng này cho phép bạn làm việc với memcached thông qua các giao diện thủ tục và OO tiện dụng.

http://code.google.com.vn/p/memcached/wiki/PHPClientComparison

                        pecl/memcache      pecl/memcached
  First Release Date      2004-06-08         2009-01-29 (beta)
  Actively Developed?     Yes                    Yes
  External Dependency     None              libmemcached

6
Câu trả lời dài dòng này thậm chí không đến gần để làm cho mọi thứ rõ ràng cho poster. Các poster đã nhận thức được có nhiều khách hàng. Liệt kê chúng và đề xuất các tên thay thế, không làm cho việc chọn đúng tên dễ dàng hơn.
Martijn Heemels
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.