Redis แคชเทียบกับการใช้หน่วยความจำโดยตรง


148

ฉันยังไม่ได้ใช้ Redis แต่ฉันได้ยินเกี่ยวกับเรื่องนี้และวางแผนที่จะลองใช้เป็นที่เก็บแคช

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

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Redis มีข้อดีอย่างไร?

คำตอบ:


230

Redis เป็นเซิร์ฟเวอร์โครงสร้างข้อมูลระยะไกล แน่นอนว่าช้ากว่าการจัดเก็บข้อมูลในหน่วยความจำภายใน (เนื่องจากเกี่ยวข้องกับการปัดเศษของซ็อกเก็ตเพื่อดึง / จัดเก็บข้อมูล) อย่างไรก็ตามยังนำเสนอคุณสมบัติที่น่าสนใจบางประการ:

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

  • การจัดเก็บหน่วยความจำ Redis ค่อนข้างมีประสิทธิภาพและทำในกระบวนการแยกต่างหาก หากแอปพลิเคชันทำงานบนแพลตฟอร์มที่มีหน่วยความจำเก็บขยะ (node.js, java, ฯลฯ ... ) จะอนุญาตให้จัดการแคช / ที่เก็บหน่วยความจำที่ใหญ่กว่ามาก ในทางปฏิบัติกองขยะที่มีขนาดใหญ่มากไม่สามารถทำงานได้ดีกับภาษาที่เก็บขยะ

  • Redis สามารถคงข้อมูลบนดิสก์ได้หากจำเป็น

  • Redis เป็นมากกว่าแคชทั่วไปเล็กน้อย: มีโครงสร้างข้อมูลที่หลากหลายนโยบายการขับไล่รายการต่างๆคิวการบล็อกผับ / ย่อยอะตอมมิกการเขียนสคริปต์ Lua ฯลฯ ...

  • Redis สามารถจำลองกิจกรรมของมันด้วยกลไกหลัก / ทาสเพื่อใช้งานที่มีความพร้อมใช้งานสูง

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


5
จุดสุดท้ายของคุณทำให้ดูเหมือนว่าสิ่งต่างๆเช่นRliteนั้นไร้จุดหมายเล็กน้อย - ร้านพจนานุกรมจะเหมาะสมกับการใช้งานส่วนใหญ่ที่คุณมีกระบวนการเดียว นั่นถูกต้องใช่ไหม?
naught101

1
ใช่. IMO ความสนใจของ Rlite ค่อนข้าง จำกัด
Didier Spezia

ขอบคุณสำหรับคำแนะนำเหล่านี้ดังนั้น Redis จึงเหมาะสำหรับการปรับขนาด แต่ฉันคิดว่าในกรณีของแอปแชทธรรมดาที่มีออบเจ็กต์โดยเฉลี่ย 300-500 รายการเพื่อดึงข้อมูลในหน่วยความจำโครงสร้างข้อมูลในหน่วยความจำจะทำงานได้ดีมากหากไม่เร็วกว่านี้เนื่องจาก มีจำนวนน้อย?
Webwoman

2
@DidierSpezia very large heaps do not perform well with garbage collected languagesอธิบายได้ไหมว่าทำไม?
roottraveller

2
@roottraveller ฉันเชื่อว่านี่เป็นเพราะกระบวนการเก็บขยะโดยทั่วไปจะต้องขัดขวางการทำงานของแอปพลิเคชันของคุณ ("หยุดโลก") เพื่อให้หน่วยความจำฮีปว่างและยิ่งฮีปมีขนาดใหญ่การหยุดชะงักก็จะยิ่งนานขึ้นเท่านั้น
Regorsmitz

4

ปัจจุบันเราถูกดึงดูดมากขึ้นในสถาปัตยกรรมที่น้อยลงของเซิร์ฟเวอร์ซึ่งแต่ละคำขอสามารถไปยังคอนเทนเนอร์ที่แตกต่างกันได้ในกรณีนี้ redis สามารถมีบทบาทสำคัญมาก

เราไม่สามารถใช้แคชแบบธรรมดาในเซิร์ฟเวอร์ให้น้อยลงได้เนื่องจากเราไม่สามารถแน่ใจได้ว่าคำขอของเราได้รับการเสิร์ฟในคอนเทนเนอร์เดียวกันกับที่เก็บแคชอย่างง่ายของเรา

ในกรณีนี้เราต้องใช้ redis เนื่องจากเก็บแคชไว้ที่สถานที่ห่างไกลและเราสามารถเข้าถึงได้แม้คอนเทนเนอร์จะเปลี่ยนสถาปัตยกรรมน้อยลง

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