“เผยแพร่ครั้งแรกในเดือนมีนาคม 2015 ที่ ObjectRocket.com/blog”
Redis® เป็นเครื่องมือที่ยอดเยี่ยม และชุมชนเทคโนโลยีก็ชอบใจ! มาไกลจากการเป็นโครงการส่วนตัวขนาดเล็กจาก Antirezto ที่จัดเก็บข้อมูลในหน่วยความจำมาตรฐานอุตสาหกรรม ซึ่งมาพร้อมกับชุดแนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ Redis อย่างถูกต้อง ในบทความนี้ เราจะสำรวจเคล็ดลับสั้นๆ สิบประการเกี่ยวกับการใช้ 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