memcache vs memcached?


76

ฉันต้องการใช้ memcached

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

ฉันได้ติดตั้งมันผ่าน yum install memcached

แต่ตอนนี้ฉันต้องเชื่อมต่อกับ PHP และมีนามสกุลชื่อ memcache และชื่อ memcached หรือไม่ โอ๊ะ

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

ใครช่วยชี้ฉันในทิศทางที่ถูกต้องที่นี่ .. อันไหนที่จะใช้ได้?

นอกจากนี้ฉันต้องเปิดพอร์ตใด ๆ เพื่อให้ทำงานได้แม้ว่าจะอยู่ในพื้นที่หรือไม่ หลังจากใช้งานฉันลอง telnet 127.0.0.1 11211 และฉันถูกปฏิเสธการเชื่อมต่อ


24
หากคุณกำลังมองหาที่คำถามนี้ตอนนี้โปรดจำไว้ว่าคำตอบที่ได้รับการยอมรับเป็นอย่างผิดปกติ การเลือกโซลูชันที่ใช้ชื่อนั้นเป็นสิ่งที่อันตรายโดยเฉพาะอย่างยิ่งเมื่อชื่อที่ดีกว่านั้นเป็นโครงการที่แย่กว่า โปรดดูคำตอบอื่น ๆ สำหรับข้อมูลเพิ่มเติม
tylerl

@thanksyo โปรดยกเลิกการเลือกคำตอบที่คุณตรวจสอบ นั่นจะทำให้ผู้คนสับสนมากขึ้นที่มาที่นี่สาย ในระหว่างนี้ฉันก็ลงคะแนนคำตอบที่ไม่ถูกต้องและแนะนำให้คนอื่นทำเช่นเดียวกันจนกว่าจะถึงเวลาเลิกขอบคุณ
joedevon

นอกจากนี้stackoverflow.com/q/1442411/632951
Pacerier

คำตอบ:


24

คำตอบสั้น ๆ : อย่างใดอย่างหนึ่งคือสิ่งที่คุณกำลังมองหา แต่ตัวเลือกแรกของฉันจะ memcache (อันแรกที่คุณระบุไว้) ตามหมดจดโดยใช้การตั้งชื่อที่ถูกต้อง

ต่อไปนี้เป็นวิธีที่ฉันได้ข้อสรุป:

นี่คือ backgrounder ที่รวดเร็วในการตั้งชื่อแบบแผน (สำหรับผู้ที่ไม่คุ้นเคย) ซึ่งอธิบายถึงความไม่พอใจของผู้ถามคำถาม: สำหรับแอปพลิเคชัน * nix จำนวนมากชิ้นที่ทำงานแบ็กเอนด์นั้นเรียกว่า "daemon" (คิดว่า "บริการ" ใน Windows- Land) ในขณะที่อินเตอร์เฟสหรือแอปพลิเคชันไคลเอนต์เป็นสิ่งที่คุณใช้เพื่อควบคุมหรือเข้าถึงภูต daemon ส่วนใหญ่มักจะตั้งชื่อเหมือนกับลูกค้าโดยมีตัวอักษร "d" ต่อท้าย ตัวอย่างเช่น "imap" จะเป็นไคลเอนต์ที่เชื่อมต่อกับ "imapd" daemon

ระเบียบการตั้งชื่อนี้มีการปฏิบัติอย่างชัดเจนโดยmemcacheเมื่อคุณอ่านบทนำของโมดูล memcache (สังเกตเห็นความแตกต่างระหว่าง memcache และ memcached ในข้อความที่ตัดตอนมานี้):

โมดูล Memcache นำเสนอขั้นตอนการทำงานและอินเทอร์เฟซที่มุ่งเน้นวัตถุที่สะดวกในการแคช daemon แคชที่มีประสิทธิภาพสูงซึ่งได้รับการออกแบบเป็นพิเศษเพื่อลดภาระฐานข้อมูลในเว็บแอปพลิเคชันแบบไดนามิก

โมดูล Memcache ยังมีตัวจัดการเซสชัน (memcache)

ข้อมูลเพิ่มเติมเกี่ยวกับ memcached สามารถพบได้ที่» http://www.danga.com/memcached/

แห้วที่นี่เกิดจากการเขียนของขยาย PHP ซึ่งเป็นชื่อที่ไม่ดีmemcachedเพราะมันใช้ชื่อเดียวกับที่เกิดขึ้นจริงที่เรียกว่าภูตmemcached โปรดสังเกตว่าในบทนำเกี่ยวกับ memcached (โมดูล php)จะกล่าวถึงlibmemcachedซึ่งเป็น shared library (หรือ API) ที่ใช้โดยโมดูลเพื่อเข้าถึง memcached daemon:

memcached เป็นระบบแคชวัตถุหน่วยความจำแบบกระจายที่มีประสิทธิภาพสูงซึ่งมีลักษณะทั่วไป แต่มีไว้สำหรับใช้ในการเร่งความเร็วเว็บแอปพลิเคชันแบบไดนามิกโดยลดภาระฐานข้อมูล

ส่วนขยายนี้ใช้ไลบรารี libmemcached เพื่อให้ API สำหรับการสื่อสารกับเซิร์ฟเวอร์ memcached นอกจากนี้ยังมีตัวจัดการเซสชัน (memcached)

ข้อมูลเกี่ยวกับ libmemcached สามารถพบได้ที่» http://tangent.org/552/libmemcached.html

โดยสรุปแล้วทั้งคู่ต่างก็มีหน้าที่เหมือนกัน แต่พวกเขามีผู้แต่งต่างกันและคนหนึ่งชื่อก็เหมาะสมกว่าอีกคนหนึ่ง


70
ชื่อของโครงการเป็นเหตุผลที่เหมาะสมจริงๆหรือไม่ที่จะเลือกการดำเนินการหนึ่งไปอีกอันหนึ่ง?
David Pashley

4
เดวิด: ไม่มาก ... แต่ก็มีเหตุผลเพียงพอที่จะออกจากการใช้งานเฉพาะจนถึงการทดสอบครั้งสุดท้ายของฉันดังนั้นจึงให้ความพึงพอใจแก่ผู้อื่นได้อย่างมีประสิทธิภาพ ฉันจะยังคงลองใช้งานทั้งหมดที่มีอยู่ แต่ข้อบกพร่องทางเทคนิคในคำอธิบายของซอฟต์แวร์โดยผู้เขียนมักทำให้ฉันสงสัยว่าข้อบกพร่องทางเทคนิคใดอาจอยู่ในซอฟต์แวร์ ฉันได้อ่านความคิดเห็นของคุณเกี่ยวกับซอฟต์แวร์จริงดังนั้นฉันจึงให้คำตอบสำหรับคุณเช่นกัน :-)
Jessica McKinnon

4
ฉันไม่เคยคิดว่า "d" ใน memcached เพื่อหมายถึง deamon แต่หมายถึงส่วนที่ผ่านมาของคำกริยาแคช นอกจากนี้คุณไม่สามารถตั้งชื่ออินเทอร์เฟซใหม่เป็น "memcache" เนื่องจากมีชื่อนั้นอยู่แล้ว
GetFree

9
จำนวนของข้อบกพร่องและหรือไม่ส่วนขยายได้รับการพัฒนาอย่างแข็งขันมีความสำคัญมากกว่าการก้นเกี่ยวกับปัญหาที่มีปัญหา อย่างจริงจังคุณไม่ควรคิดเกี่ยวกับการทดสอบหนึ่งส่วนขยายที่ผ่านมาเพราะอย่างนั้นมันออกจากค้างคาวอย่างสมบูรณ์
Fake51

12
เอิ่มทั้งสองไม่ได้ทำงานเหมือนกัน: memcachedรองรับ cas tokens ตัวอย่างเช่นmemcacheไม่ หากคุณต้องการสิ่งเหล่านี้คุณจะรู้ว่าควรเลือกแบบใด
Wrikken

56

คุณอาจต้องการที่จะเห็นการเปรียบเทียบไคลเอ็นต์ PHP

ฉบับย่อ: พวกเขาทั้งสองจะได้ผลและสำหรับกรณีส่วนใหญ่คนใดคนหนึ่งจะทำได้ดี

เกี่ยวกับปัญหาอื่น ๆ : telnet 127.0.0.1 11211ใช่คุณควรจะสามารถที่จะทำ ไฟร์วอลล์น้อยมากที่จะบล็อก localhost ไม่ให้สื่อสารกับตัวเอง หากคุณไม่สามารถเชื่อมต่อได้ให้ตรวจสอบว่า memcached กำลังทำงานอยู่โดยการทำps auxwww | grep memcachedจริงซึ่งจะแสดงอาร์กิวเมนต์บรรทัดคำสั่งที่ใช้ในการเริ่ม memcached ด้วย หนึ่งในอาร์กิวเมนต์ควรเป็น-p 11211หรือหมายเลขพอร์ตอื่น ดูman memcachedความหมายของข้อโต้แย้งที่เป็นไปได้ทั้งหมด


2
โหวตขึ้นสำหรับการเพิ่มขั้นตอนการแก้ไขปัญหาบางอย่าง
Jessica McKinnon

นี่เป็นคำตอบที่ชัดเจนจริงๆ
danidacar

@Nate อะไรเทียบเท่าของ Windows ps auxwww | grep memcached?
Pacerier

1
@Pacerier: ลองดูที่superuser.com/questions/415360/... Process Explorer เป็นวิธีที่ง่ายที่สุดในการค้นหากระบวนการทำงานและดูอาร์กิวเมนต์บรรทัดคำสั่ง
เนท

@Pacerier คำสั่งนั้นตรวจสอบว่ากระบวนการเซิร์ฟเวอร์ทำงานอยู่และดูว่ามีการเรียกใช้อย่างไร
Jasen

27

ตามลิงก์ของ Nate แนะนำทั้งคู่ทำงานได้อย่างสมบูรณ์แบบสำหรับการใช้งานที่เรียบง่าย อย่างไรก็ตาม memcached รองรับคุณสมบัติอื่น ๆ ที่ช่วยให้คุณได้ประสิทธิภาพสูงสุดจาก memcached โปรโตคอลไบนารีช่วยลดปริมาณข้อมูลที่ต้องใช้ในการส่งระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ Multigets และ Multisets ช่วยให้คุณรับ / ตั้งค่าหลายรายการพร้อมกัน หากคุณพบว่าคุณต้องการอุมพ์เพิ่มเติมจาก memcache memcached เป็นโมดูลที่ดีกว่า การใช้ libmemcached ชี้ให้เห็นว่าห้องสมุดเองนั้นอาจได้รับการปรับให้เหมาะสมที่สุดกว่าเวอร์ชัน PHP เท่านั้น

Memcached เป็นโมดูลที่ใหม่กว่าเมื่อเปรียบเทียบกับ memcache เพิ่งเปิดตัวเมื่อ 8 เดือนที่ผ่านมา หากคุณต้องการกำหนดเป้าหมายเวอร์ชันที่เก่ากว่าของ PHP คุณสามารถใช้ memcache ได้เท่านั้น


คำอธิบายที่ดี!
จอห์น

21

รุ่นเก่าที่มีชื่อเรียกว่า buggier นั้นเป็นชื่อphp-memcacheที่เหมาะสมที่สุด รุ่นที่ใหม่กว่าและดีกว่าพัฒนาโดยคนที่ Digg แทนที่จะได้รับการตั้งชื่อphp-memcachedเพื่อผลประโยชน์ของความเข้าใจผิด

ผู้ที่จะแนะนำให้คุณเลือกอย่างใดอย่างหนึ่งตามความถูกต้องของชื่อจริง ๆ แล้วไม่มีธุรกิจเสนอคำแนะนำด้านเทคนิค


6

มี php-memcache ใช้เมื่อเร็ว ๆ นี้ฉันจะต้องชี้ให้คุณ php-memcached

นี่คือเหตุผลสองสามข้อที่อยู่ด้านบนของหัวของฉัน ..

1) ไม่มี getErrorCode () หรือวิธีการเทียบเท่าดังนั้นถ้า get () ส่งคืนค่า FALSE คุณจะไม่ทราบว่าเป็นเพราะค่าที่เก็บใน memcache นั้นเป็นเท็จหรือมีปัญหาบางอย่างหรือไม่

2) อัลกอริทึมการแฮชสำหรับการแฮชที่สอดคล้องกันนั้นดูเหมือนจะแตกต่างจากการปรับใช้อื่น ๆ เช่นไลบรารีไคลเอ็นต์จำนวนมากที่สร้างขึ้นจาก libmemcached ซึ่งหมายความว่าหากคุณต้องการใช้กลุ่ม memcache เดียวกันกับหลายภาษาคุณอาจมีปัญหาในการที่คุณจะเก็บค่าไว้กับไคลเอนต์ PHP และลูกค้าอื่นจะไม่พบมัน


3

ทั้งสองมีปัญหา ณ วันนี้ PECL / memcache นั้นเก่าและเชื่อถือได้โดยมีข้อยกเว้นบางประการที่มันล้าสมัย PECL / memcached 1.x เป็นเบต้าที่ดีที่สุด ฟังก์ชั่นบางอย่างไม่จัดการกับคีย์ตัวเลขมันรั่วการเชื่อมต่อเมื่อใช้การเชื่อมต่อแบบถาวร บางคน (ทั้งหมด?) กำลังได้รับการแก้ไขใน GitHub และจะได้รับการปล่อยตัวในบางจุดใน 2.x แต่ไม่ใช่วันนี้ สำหรับการตรวจสอบรายละเอียดเพิ่มเติมดูhttp://brian.moonspot.net/php-memcached-issues


PECL / memcached 1.x เสถียรแล้ว PECL / memcache 2.x ถูก จำกัด PECL / memcache 3.x ไม่เสถียรอย่างมาก
aredridel

2

ฉันกำลังทำงานกับหนังสือ "Expert PHP และ MySQL" ฉันเขียนสิ่งเดียวกันเกี่ยวกับความแตกต่าง สิ่งที่ฉันแนะนำคือ PECL / memcached # 1 - มันล้อมรอบไลบรารี C ที่มีประสิทธิภาพเต็มรูปแบบ # 2 - มันถูกเก็บรักษาไว้เมื่อเร็ว ๆ นี้ # 3 - คุณสมบัติเพิ่มเติม ไม่มีการดูหมิ่น PECL / memcache


0

ฉันมีปัญหาที่ค่อนข้างรุนแรงเกี่ยวกับ Drupal 6 และ php-pecl-memcached ซึ่งเวลาตอบสนองล่าช้าถึง 5ms ต่อการโทรหนึ่งครั้งและจะทำให้ไซต์หนึ่งทำการสร้างการโทรมากกว่า 5 เท่าก่อนการเปลี่ยนเป็น php-pecl-memcached . การเปลี่ยนเป็น php-pecl-memcache ช่วยแก้ไขปัญหาทั้งหมดได้; เวลาในการตอบสนองและการโทรพิเศษ

คำตอบนี้อยู่ที่นี่เพียงเพื่อช่วยเหลือผู้ที่ใช้ Drupal 6 และอาจเป็น Drupal 7


-3
  • memcache เป็นไคลเอนต์ของ memcached (เซิร์ฟเวอร์)
  • libmemcached ยังเป็นไคลเอนต์ที่จะ memcached

และมีไคลเอนต์อื่น ๆ สำหรับ memcached ดูhttp://code.google.com/p/memcached/wiki/Clients

ตัดและวางจากเว็บ:

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 "ส่วนขยาย PHP สำหรับเชื่อมต่อกับ memcached ผ่านไลบรารี libmemcached" ส่วนขยายนี้ใช้ไลบรารี libmemcached เพื่อให้ API สำหรับการสื่อสารกับเซิร์ฟเวอร์ memcached https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache "ส่วนขยาย memcached" Memcached เป็นแคช daemon ที่ออกแบบมาโดยเฉพาะสำหรับเว็บแอปพลิเคชันแบบไดนามิกเพื่อลดโหลดฐานข้อมูลโดยการจัดเก็บวัตถุในหน่วยความจำ ส่วนขยายนี้ช่วยให้คุณทำงานกับ memcached ผ่าน OO ที่มีประโยชน์และอินเทอร์เฟซขั้นตอน

http://code.google.com/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
คำตอบที่ยืดยาวนี้ไม่ได้ใกล้เคียงกับการทำให้สิ่งที่ชัดเจนสำหรับโปสเตอร์ ผู้โพสต์ทราบแล้วว่ามีลูกค้าหลายราย การระบุรายชื่อและเสนอชื่อทางเลือกไม่ได้ช่วยให้เลือกชื่อที่ถูกต้องได้ง่ายขึ้น
Martijn Heemels
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.