ฉันเคยเห็นไซต์รางขนาดใหญ่สองสามแห่งที่ใช้ทั้ง Memcached และ Redis Memcached ใช้สำหรับสิ่งชั่วคราวที่ดีในการเก็บความทรงจำ แต่อาจสูญหาย / สร้างใหม่ได้หากจำเป็นและ Redis สำหรับพื้นที่จัดเก็บถาวร ทั้งสองใช้ในการโหลดออกจากฐานข้อมูลหลักสำหรับการอ่าน / เขียนการดำเนินการที่หนักหน่วง
รายละเอียดเพิ่มเติม:
Memcached:ใช้สำหรับการแคชเพจ / / การตอบกลับและสามารถเข้าถึงขีด จำกัด หน่วยความจำบน Memcached ได้เนื่องจาก LRU (ใช้งานน้อยที่สุด) เพื่อทำให้สิ่งเก่าหมดอายุและมักจะทำให้คีย์ที่เข้าถึงร้อนอยู่ในหน่วยความจำ สิ่งสำคัญคือทุกสิ่งใน Memcached สามารถสร้างขึ้นใหม่จากฐานข้อมูลได้หากจำเป็น (ไม่ใช่สำเนาของคุณเท่านั้น) แต่คุณสามารถทิ้งสิ่งต่างๆลงไปได้เรื่อย ๆ และ Memcached จะคิดว่าสิ่งใดถูกใช้บ่อยที่สุดและเก็บสิ่งเหล่านั้นไว้ในความทรงจำ คุณไม่ต้องกังวลเกี่ยวกับการนำสิ่งต่างๆออกจาก Memcached
redis:คุณใช้สิ่งนี้สำหรับข้อมูลที่คุณไม่ต้องการสูญเสียและมีขนาดเล็กพอที่จะใส่ลงในหน่วยความจำได้ ซึ่งมักจะรวมถึงงาน resque / sidekiq ตัวนับสำหรับการ จำกัด อัตราผลการทดสอบแยกหรืออะไรก็ตามที่คุณไม่ต้องการสูญเสีย / สร้างใหม่ คุณไม่ต้องการใช้หน่วยความจำเกินขีด จำกัด ที่นี่ดังนั้นคุณต้องระมัดระวังมากขึ้นเกี่ยวกับสิ่งที่คุณจัดเก็บและทำความสะอาดในภายหลัง
Redis เริ่มประสบปัญหาด้านประสิทธิภาพเมื่อเกินขีด จำกัด หน่วยความจำ (แก้ไขฉันถ้าฉันผิด) เป็นไปได้ที่จะแก้ปัญหานี้โดยการกำหนดค่า Redis ให้ทำหน้าที่เหมือน Memcached และ LRU จะหมดอายุดังนั้นจึงไม่ถึงขีด จำกัด หน่วยความจำ แต่คุณไม่ต้องการทำสิ่งนี้กับทุกสิ่งที่คุณเก็บไว้ใน Redis เช่นงาน resque ดังนั้นแทนที่จะมีคนใช้ค่าเริ่มต้น Rails.cache จึงตั้งค่าให้ใช้ Memcached (โดยใช้dalli
อัญมณี) จากนั้นพวกเขาจะเก็บตัวแปรส่วนกลาง $ redis = ... ไว้แยกต่างหากเพื่อดำเนินการ redis
config.cache_store = :dalli_store
$redis = $redis = Redis.connect(url: ENV['REDIS_URL'])
อาจมีวิธีง่ายๆในการทำสิ่งนี้ทั้งหมดใน Redis โดยอาจมีอินสแตนซ์ Redis สองอินสแตนซ์ที่แยกจากกันหนึ่งอินสแตนซ์มีขีด จำกัด หน่วยความจำฮาร์ด LRU คล้ายกับ Memcache และอีกอันสำหรับพื้นที่เก็บข้อมูลถาวร? ฉันไม่เคยเห็นสิ่งนี้มาใช้ แต่ฉันเดาว่ามันน่าจะทำได้