Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

เคล็ดลับ 10 ข้อสำหรับ Redis

“เผยแพร่ครั้งแรกในเดือนมีนาคม 2015 ที่ ObjectRocket.com/blog”

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

เคล็ดลับ 10 ข้อสำหรับ Redis

1. หยุดใช้กุญแจ

โอเค บางทีการตะโกนใส่คุณอาจไม่ใช่วิธีที่ดีในการเริ่มบทความนี้ แต่อาจเป็นจุดที่สำคัญที่สุด บ่อยเกินไปที่ฉันมองไปที่ Redis เช่น ดึง commandstats . อย่างรวดเร็ว และเห็น KEYS . ที่จ้องเขม็ง จ้องมองกลับมาที่ฉัน ในความเป็นธรรมทั้งหมด มาจากจุดยืนเชิงโปรแกรม มันสมเหตุสมผลแล้วที่จะมี pseudocode คล้ายกับสิ่งนี้:

for key in 'keys *':
  doAllTheThings()

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

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

2. ค้นหาสิ่งที่ทำให้ Redis ช้าลง

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

127.0.0.1:6379> INFO commandstats
# Commandstats
cmdstat_get:calls=78,usec=608,usec_per_call=7.79
cmdstat_setex:calls=5,usec=71,usec_per_call=14.20
cmdstat_keys:calls=2,usec=42,usec_per_call=21.00
cmdstat_info:calls=10,usec=1931,usec_per_call=193.10

ซึ่งจะให้รายละเอียดเกี่ยวกับคำสั่งทั้งหมด จำนวนครั้งที่เรียกใช้ และจำนวนไมโครวินาทีที่ใช้ในการดำเนินการ (รวมและเฉลี่ยต่อการโทร) หากต้องการรีเซ็ต ให้เรียกใช้ CONFIG RESETSTAT และคุณมีกระดานชนวนใหม่ล่าสุด

3. ใช้ Redis-Benchmark เป็นพื้นฐาน ไม่ใช่ความจริงของพระกิตติคุณ

Salvatore ผู้สร้าง Redis ขีดเส้นใต้ว่า:“เพื่อทดสอบ Redis ทำ GET/SET ก็เหมือนการทดสอบรถเฟอร์รารีเพื่อดูว่าทำความสะอาดกระจกได้ดีเพียงใดเมื่อฝนตก” หลายครั้งที่ผู้คนมาหาฉันสงสัยว่าเหตุใดผลลัพธ์ Redis-Benchmark ของพวกเขาจึงน้อยกว่าค่าที่เหมาะสม แต่เราต้องคำนึงถึงปัจจัยต่างๆ หลายประการ เช่น:

  • ข้อจำกัดฝั่งไคลเอ็นต์
  • ความแตกต่างในการกำหนดเวอร์ชัน
  • การทดสอบอย่างต่อเนื่อง

เกณฑ์มาตรฐาน Redis ให้พื้นฐานที่ยอดเยี่ยมเพื่อให้แน่ใจว่า redis-server . ของคุณ ทำงานได้ตามปกติ แต่ไม่ควรถือเป็นจริง การทดสอบการโหลด . การทดสอบโหลดจำเป็นต้องสะท้อนว่าแอปพลิเคชันของคุณทำงานอย่างไรในสภาพแวดล้อมที่ใกล้เคียงกับการใช้งานจริงมากที่สุด

4. แฮชคือเพื่อนที่ดีที่สุดของคุณ

เชิญแฮชไปทานอาหารเย็น แฮชไวน์และรับประทานอาหาร คุณจะทึ่งในความสุขที่พวกเขานำมาได้หากคุณให้โอกาสพวกเขา ฉันเคยเห็นโครงสร้างสำคัญๆ เช่นนี้มาก่อน:

foo:first_name
foo:last_name
foo:address

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

127.0.0.1:6379> HSET foo first_name "Joe"
(integer) 1
127.0.0.1:6379> HSET foo last_name "Engel"
(integer) 1
127.0.0.1:6379> HSET foo address "1 Fanatical Pl"
(integer) 1
127.0.0.1:6379> HGETALL foo
1) "first_name"
2) "Joe"
3) "last_name"
4) "Engel"
5) "address"
6) "1 Fanatical Pl"
127.0.0.1:6379> HGET foo first_name
"Joe"

5. ตั้งค่า TTL (Time To Live)!

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

6. การเลือกนโยบายการขับไล่ที่เหมาะสม

ในขณะที่เราอยู่ในหัวข้อการทำความสะอาดกุญแจ เรามาพูดถึงเรื่องการขับไล่กัน เมื่ออินสแตนซ์ Redis ของคุณเต็ม Redis จะพยายามถอดคีย์ออก เราขอแนะนำ volatile-lru ขึ้นอยู่กับกรณีการใช้งานของคุณ —สมมติว่าคุณมีกุญแจที่หมดอายุ หากคุณเรียกใช้บางอย่างเช่น acache และไม่มีชุดการหมดอายุ คุณอาจพิจารณา allkeys-lru . เราขอแนะนำให้คุณตรวจสอบตัวเลือกที่มีที่นี่

7. หากข้อมูลของคุณมีความสำคัญ ให้ใส่ ลอง/ยกเว้น

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

8. อย่าท่วมหนึ่งตัวอย่าง

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

9. คอร์มากขึ้น =ประสิทธิภาพดีขึ้นใช่ไหม!

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

10. ฮาทุกอย่าง!

Redis Sentinel ได้รับการทดสอบเป็นอย่างดีแล้ว และผู้ใช้จำนวนมากได้ใช้งานจริงในเวอร์ชันที่ใช้งานจริง (รวม Rackspace ObjectRocket ด้วย) หากคุณพึ่งพา Redis อย่างมากสำหรับแอปพลิเคชันของคุณ คุณจะต้องพิจารณาโซลูชันที่มีความพร้อมใช้งานสูง (HA) เพื่อให้คุณออนไลน์ได้ แน่นอน หากคุณไม่ต้องการจัดการทั้งหมดด้วยตัวเอง Rackspace ObjectRocket ขอเสนอแพลตฟอร์ม HA ของเราพร้อมการสนับสนุน 24×7 ลองดูสิ

เรียนรู้เพิ่มเติมเกี่ยวกับ Rackspace DBA Services

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

คลิกที่นี่เพื่อดูข้อกำหนดในการให้บริการของ Rackspace Cloud