memcached เป็นไดโนเสาร์เมื่อเทียบกับ Redis หรือไม่? [ปิด]


185

ฉันได้ทำงานกับ memcached มาหลายสัปดาห์แล้วและเพิ่งรู้เรื่อง Redis เมื่อฉันอ่านส่วนหนึ่งของ readme ของพวกเขาฉันก็รู้สึกอบอุ่นและสบายในท้องของฉัน:

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

ฟังดูน่าอัศจรรย์ ฉันยังพบหน้านี้พร้อมการวัดประสิทธิภาพ: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

ดังนั้นจริงๆแล้ว - memcache จริงๆแล้วเป็น dinousaur เก่าที่เป็นตัวเลือกที่ไม่ดีจากมุมมองการทำงานเมื่อเทียบกับผู้มาใหม่ที่เรียกว่า Redis?

ก่อนหน้านี้ฉันไม่เคยได้ยินเรื่อง Redis มามากดังนั้นแนวทางสำหรับคำถามของฉัน!


การอ่านเพิ่มเติมที่น่าสนใจ: nosql.mypopescu.com/post/519078332/memcached-on-top-of-redis
อุตสาหกรรม

9
เกณฑ์มาตรฐาน ruturaj นี้ไม่ได้คุ้มค่ามากนัก
dsomnus

2
เราได้เริ่มทดลอง w / Membase ในที่ทำงานและมีความสุขจนถึงตอนนี้ แม้ว่าเรามาจาก Memcache ดังนั้นการได้รับการแทนที่จึงเป็นข้อดีที่
jayshao

2
Redis นั้นเร็วเท่ากับ memcached สำหรับการวัดผลที่ไม่ใช่ของจริง ไม่แนะนำให้มันช้า - มันเร็วพอสำหรับเวิร์กโหลดส่วนใหญ่ แต่สิ่งที่เร็วกว่า memcached จะแสดงเฉพาะบั๊กใน memcached เท่านั้น มันมักจะเป็นปัญหาคอขวดจากการออกแบบฮาร์ดแวร์หรือแอพพลิเคชั่นที่ไม่ดี
ดัสติน

4
ฉันประหลาดใจที่ความศักดิ์สิทธิ์ของการลาดตระเวนไม่ได้ปิดคำถามนี้เนื่องจากไม่เหมาะสมและไม่เป็นประโยชน์
Dogweather

คำตอบ:


74

Memcache ยังคงเป็นเครื่องมือที่ยอดเยี่ยมและน่าเชื่อถือมาก

แทนที่จะมองปัญหานี้จากมุมมองทำให้ผู้ที่เร็วกว่าในช่วง <100 ms ดูประสิทธิภาพต่อ "คลาส" ของซอฟต์แวร์

  • ใช้ RAM ในพื้นที่เท่านั้นหรือไม่ -> เร็วที่สุด
  • มันใช้แรมระยะไกลหรือไม่? -> เร็ว
  • มันใช้ ram plus hardddisk -> โอ้เหรอ
  • ใช้ harddisk เพียง -> run!

3
ไม่มีเครื่องมืออำนวยความสะดวกในการจัดการการจำลองด้วย memcache ที่ฉันรู้ Memcache มีความหมายอย่างแท้จริงว่าเป็นแคช หากรายการถูกลบ / หายไปจะต้องทำการสร้างใหม่ ฉันไม่ได้ใช้สิ่งนี้มาก่อนหรือไม่ได้ประเมิน แต่อาจเป็นที่สนใจของคุณ code.google.com/p/memagent
Daniel

1
Membase รองรับโปรโตคอล memcached แต่ยังคงอยู่และทำซ้ำ
Jim Ferrans

1
เมื่อเร็ว ๆ นี้ฉันเห็นอีเทอร์เน็ตถูกผูกมัดผ่าน 4 พอร์ต 4 x 44MB / s นี่ทำให้ RAM มีค่ามากขึ้นโดยสมมติว่าคุณสามารถเชื่อมต่ออีเธอร์เน็ตได้!
Daniel

1
เพื่อประโยชน์ในการอ้างอิงในอนาคต, Facebook เปิดแหล่งที่มา mcrouter เมื่อเร็ว ๆ นี้ซึ่งเพิ่มการจำลองแบบเพื่อ memcached สิ่งอื่น ๆ ยังมีวันที่ (Redis เร็วสุดในขณะนี้ ฯลฯ ) แต่ FYI ถ้าคุณอยู่ที่นี่ห้าปีต่อมา ...
dannysauer

จุดคืออะไร ทั้งสองไม่สามารถจัดเก็บ json array direclty ที่ธรรมดาที่สุด WIDELY ใช้รูปแบบการแลกเปลี่ยนข้อมูลบนเว็บฉันไม่รู้ว่าพวกเขากำลังคิดอะไรอยู่ ... โอ้เดี๋ยวก่อนฉันควรจะเพิ่ม ReJSON เพราะไม่มีใครสนใจ JSON ในโลก
PirateApp

205

ขึ้นอยู่กับสิ่งที่คุณต้องการโดยทั่วไปฉันคิดว่า:

  • คุณไม่ควรสนใจเรื่องการแสดงมากเกินไป Redis เร็วกว่าต่อหนึ่งคอร์ที่มีค่าน้อย แต่ memcached สามารถใช้หลายคอร์ที่มีไฟล์เรียกทำงานและ TCP พอร์ตเดียวโดยไม่ต้องใช้ความช่วยเหลือจากไคลเอนต์ memcached ยังเร็วกว่าด้วยค่ามากในลำดับ 100k Redis เพิ่งปรับปรุงจำนวนมากเกี่ยวกับค่าขนาดใหญ่ (สาขาที่ไม่เสถียร) แต่ยังคง memcached เร็วขึ้นในกรณีการใช้งานนี้ ประเด็นตรงนี้คือ: หรืออย่างใดอย่างหนึ่งอาจจะเป็นคอขวดของคุณสำหรับการค้นหาต่อวินาทีที่พวกเขาสามารถส่งมอบ
  • คุณควรใส่ใจกับการใช้งานหน่วยความจำ สำหรับคู่ที่คีย์ - ค่าอย่างง่าย memcached มีหน่วยความจำที่มีประสิทธิภาพมากขึ้น ถ้าคุณใช้แฮชของ Redis Redis จะมีประสิทธิภาพของหน่วยความจำมากกว่า ขึ้นอยู่กับกรณีการใช้งาน
  • คุณควรสนใจเกี่ยวกับการคงอยู่และการจำลองแบบสองคุณสมบัติที่มีอยู่ใน Redis เท่านั้น แม้ว่าเป้าหมายของคุณคือการสร้างแคช แต่ก็ช่วยได้ว่าหลังจากอัปเกรดหรือรีบูตข้อมูลของคุณยังคงอยู่ที่นั่น
  • คุณควรใส่ใจเกี่ยวกับประเภทของงานที่คุณต้องการ ใน Redis มีการดำเนินการที่ซับซ้อนจำนวนมากแม้เพียงแค่พิจารณากรณีการใช้แคชคุณมักจะสามารถดำเนินการได้มากขึ้นในการดำเนินการเดียวโดยไม่ต้องใช้ข้อมูลในการประมวลผลฝั่งไคลเอ็นต์ (บางครั้ง I / O จำเป็นมาก) การดำเนินการนี้มักจะรวดเร็วพอ ๆ กับ GET และ SET ดังนั้นหากคุณไม่ต้องการเพียงแค่ GET / SET แต่สิ่งที่ซับซ้อนกว่า Redis สามารถช่วยคุณได้มาก (คิดที่ timeline caching)

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

ปล. แน่นอนฉันจะลำเอียงเพราะฉันเป็นผู้นำในการพัฒนาโครงการ Redis


67
+1 สำหรับการเปิดเผยที่ดีในตอนท้าย
NateDSaint

6
ฉันไม่แน่ใจว่านี่เป็นข้อผิดพลาดทางภาษาหรือไม่ แต่ถ้าคุณนำข้อโต้แย้งของคุณมาด้วย "โดยทั่วไปฉันคิดว่าคุณไม่ควรสนใจเรื่องการแสดงมากเกินไป" นั่นเป็นสาเหตุที่ทำให้เกิดความกังวลอย่างมาก Redis อาจดีมากสำหรับปัญหาบางประเภท แต่โดยปกติแล้ว memcache ถูกใช้โดยเฉพาะเพื่อแก้ไขปัญหาของประสิทธิภาพด้วยฐานข้อมูลแบบถาวร ฉันยังคิดว่าการละเลยการจ้องมองจากรายการของคุณคือความสมบูรณ์ของผลิตภัณฑ์ Memcache เป็นผลิตภัณฑ์สำหรับผู้ใหญ่ที่มีประสบการณ์ยาวนานกว่าทศวรรษ Redis สัญญา แต่มีเพียงประมาณ 3 ปีหรือมากกว่านั้น
DougW

1
@DougW คุณกำลังนำวลีนี้ออกจากบริบท มันสมเหตุสมผลมากขึ้นเมื่อคุณอ่านวลีที่ปิดย่อหน้าทันทีหลังจาก: "ประเด็นที่นี่คือ: และอย่างใดอย่างหนึ่งไม่น่าจะเป็นคอขวดของคุณสำหรับแบบสอบถามต่อวินาทีที่พวกเขาสามารถส่งมอบ"
Dinei

83

ดังนั้นจริงๆแล้ว - memcache จริงๆแล้วเป็น dinousaur เก่าที่เป็นตัวเลือกที่ไม่ดีจากมุมมองการทำงานเมื่อเทียบกับผู้มาใหม่ที่เรียกว่า Redis?

  • การเปรียบเทียบฟีเจอร์ที่ตั้งไว้นั้นRedisมีฟังก์ชั่นการใช้งานที่มากกว่า
  • การเปรียบเทียบความง่ายในการติดตั้งRedisยังง่ายขึ้นอีกมาก ไม่จำเป็นต้องพึ่งพา
  • การเปรียบเทียบการพัฒนาเชิงรุกRedisก็ดีขึ้นเช่นกัน
  • ผมเชื่อว่าmemcachedเป็นนิด ๆ หน่อย ๆ Redisได้เร็วกว่า มันไม่ได้สัมผัสแผ่นดิสก์เลย
  • ความเห็นของผมก็คือว่าเป็นผลิตภัณฑ์ที่ดีกว่าRedismemcached

31
redis เพียงสัมผัสดิสก์ถ้าคุณบอกให้ โดยปกติแล้วมันจะ fsync ทุก ๆ วินาทีหรือมากกว่านั้น -> คุณจะไม่สังเกตุ
Marc Seeger

1
@Marc yup ฉันยังเชื่อว่าคุณสามารถบอกได้ว่าจะไม่แตะดิสก์เลย แต่มาตรฐานฉันเชื่อว่ามัน fsyncs เสมอตอนนี้หรือไม่
อัลเฟรด

3
ในประสบการณ์ของฉัน Redis นั้นเร็วกว่า Memcached (เมื่อใช้ Redis ในโหมดหน่วยความจำเท่านั้น) Antirez ทำการทดสอบที่นี่antirez.com/post/redis-memcached-benchmark.html
Sune Rievers

10
ความแตกต่างใหญ่: Memcached เป็นแบบมัลติเธรดและ Redis ไม่ใช่ ดังนั้นในขณะที่เวลาแฝงของการร้องขอเดียวมีการเปรียบเทียบ Memcached สามารถให้บริการการร้องขออื่น ๆ อีกมากมายเมื่อการทำงานพร้อมกันสูง ในทางตรงกันข้าม Redis จะไปถึงจุดสูงสุดของประสิทธิภาพพร้อมกับคำร้องขอเพียงสองสามตัวพร้อมกันเนื่องจากใช้เพียง 1 cpu core / thread เท่านั้น วิธีที่แนะนำในการหลีกเลี่ยงสิ่งนี้คือการเรียกใช้หลายอินสแตนซ์ของ Redis บนเครื่องหนึ่งซึ่งมีการแฮชที่สอดคล้องกัน แต่นี่เป็นวิธีที่ไม่ดีนัก ดังนั้นหากคุณต้องการการทำงานพร้อมกันสูงและมีซีพียูแบบมัลติคอร์ (ที่ไม่มี) Memcached นั้นเร็วกว่ามาก
ColinM

2
@ อัลเฟรดมันไม่ใช่ความจริงที่ซ่อนเร้นว่า Redis เป็นเธรดเดี่ยว แต่เป็นการตัดสินใจออกแบบ (เรียบง่ายกว่าความทนทาน) โดยผู้เขียน บทความที่ดัสตินเชื่อมโยงกับข้างต้นเป็นหลักฐานที่มั่นคงว่ามีผลกระทบจริง นอกจากนี้ฉันได้ยืนยันสิ่งนี้ในการวัดประสิทธิภาพของฉันเองโดยใช้ Redis เป็นแบ็กเอนด์ Zend_Cache; เมื่อเห็นพ้องต้องกันว่าเพิ่มขึ้น Redis จะเป็นที่ราบสูงค่อนข้างเร็วเมื่อเทียบกับ memcached
ColinM

46

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

นั่นคือความแตกต่างที่สำคัญถ้าคุณเพียงแค่ใช้มันเป็นแคช



13

คุณอาจต้องการดู Membase

http://www.northscale.com/products/membase_server.html

ฉันไม่ได้ใช้มัน แต่ดูเหมือนว่า Redis จะเป็นที่เก็บ KV ที่มีหน่วยความจำเป็นศูนย์กลางพร้อมการคงอยู่ ความแตกต่างที่สำคัญจากสิ่งที่ฉันเห็นคือ:

  • Redis มีความสามารถในการจัดการข้อมูลมากขึ้น (ชุดที่สั่งซื้อเป็นต้น)
  • Redis มีโครงการ Redis Cluster ที่ค้างอยู่เพื่อเพิ่มความยืดหยุ่นในแนวนอน
  • Redis มีการถ่ายโอนข้อมูลไปยังดิสก์ (VM) ชั้นเดียวโดยใช้อัลกอริทึมไฮบริดที่พิจารณาทั้ง LRU และขนาดของวัตถุ

  • Membase ใช้โปรโตคอลลวด memcached - มีประโยชน์เป็นเส้นทางการอัพเกรดสำหรับการใช้งานที่มีอยู่

  • Membase ถูกตั้งค่าให้ขยายตามแนวนอนโดยใช้วิธีแฮชเท็กซ์แบบกระจาย
  • Membase สามารถรองรับการถ่ายโอนข้อมูลได้หลายระดับโดยใช้วิธี LRU (ไม่ค่อยมีใครใช้ไปที่ดิสก์สิ่งที่ไม่ค่อยจะไป SSD มักจะอยู่ใน RAM)
  • ไม่แน่ใจเกี่ยวกับความสามารถของ TTL ใน Membase

ตัวเลือกอาจขึ้นอยู่กับระดับที่แอปพลิเคชันของคุณสามารถใช้ประโยชน์จากฟังก์ชันการจัดการข้อมูลพิเศษใน Redis


สวัสดีคณบดีขอบคุณสำหรับการโพสต์ของคุณ ฉันจะตรวจสอบอย่างแน่นอน ฉันสามารถใช้ Membase ใน PHP ได้ไหม
อุตสาหกรรม

4
เนื่องจาก Membase ใช้โปรโตคอล memcached ไคลเอนต์ memcached ใด ๆ ควรทำงาน: wiki.membase.org/bin/view/Main/Clients
HikeOnPast

Membase รองรับ TTL การสนับสนุนการประยุกต์ใช้ Memcache ทั้งหมดทำให้เวลาหมดอายุ github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Saurav

0

Hazelcast รองรับโปรโตคอล memcached

https://web.archive.org/web/20140601010929/http://hazelcast.org/docs/latest/manual/html-single/hazelcast-documentation.html

และเป็นทางเลือกที่ทันสมัยในการ memcached คุณควรลองวิธีแก้ปัญหาทั้งหมดเพื่อดูว่าอะไรดีที่สุดสำหรับคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.