ชื่อเต็มของ Redis RDB คืออะไร? โหมดการคงอยู่ของข้อมูลหน่วยความจำ Redis RDB

ชื่อเต็มของ RDB คือRedis database.

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

ชื่อเต็มของ Redis RDB คืออะไร? โหมดการคงอยู่ของข้อมูลหน่วยความจำ Redis RDB

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

ดังนั้น เราจำเป็นต้องเขียนข้อมูลในหน่วยความจำลงในดิสก์ตามช่วงเวลาที่กำหนด ซึ่งเป็นสแนปชอตในศัพท์แสง

เมื่อกู้คืน ไฟล์สแน็ปช็อตจะถูกเขียนไปยังหน่วยความจำโดยตรง

นี่เป็นหนึ่งในความแตกต่างที่สำคัญระหว่าง Redis และ Memcached เนื่องจาก Memcached ไม่มีความสามารถในการคงอยู่

เพื่อความคงอยู่ของข้อมูลหน่วยความจำ Redis นั้น Redis ให้วิธีการต่อไปนี้แก่เรา:

  • วิธีสแนปชอต (RDB, Redis DataBase): เขียนข้อมูลหน่วยความจำลงในดิสก์ในรูปแบบไบนารีในช่วงเวลาหนึ่ง
  • ผนวกไฟล์เท่านั้น (AOF, ผนวกไฟล์เท่านั้น) บันทึกคำสั่งการดำเนินการทั้งหมด และผนวกไฟล์ในรูปแบบข้อความ
  • การคงอยู่แบบไฮบริดซึ่งเป็นวิธีการใหม่หลังจาก Redis 4.0 การคงอยู่แบบไฮบริดผสมผสานข้อดีของ RDB และ AOFเมื่อเขียน ให้เขียนข้อมูลปัจจุบันไปที่จุดเริ่มต้นของไฟล์ในรูปแบบ RDB จากนั้นให้บันทึกคำสั่งการดำเนินการที่ตามมาลงในไฟล์ในรูปแบบของ AOF ซึ่งไม่เพียงแต่สามารถรับประกันความเร็วของ Redis ที่รีสตาร์ทเท่านั้น แต่ยังลดอีกด้วย ความเสี่ยงของการสูญเสียข้อมูล

เนื่องจากรูปแบบการคงอยู่แต่ละแบบมีสถานการณ์การใช้งานเฉพาะ

โหมดการคงอยู่ของข้อมูลหน่วยความจำ Redis RDB

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

ทริกเกอร์ RDB . ด้วยตนเอง

มีการดำเนินการสองอย่างเพื่อทริกเกอร์การคงอยู่ด้วยตนเอง:saveและbgsave.

ความแตกต่างหลักระหว่างพวกเขาคือการบล็อกการดำเนินการของเธรดหลัก Redis หรือไม่

1. บันทึกคำสั่ง

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

127.0.0.1:6379> save
OK
127.0.0.1:6379>

กระบวนการดำเนินการคำสั่งแสดงในรูป 

2. คำสั่ง bgsave

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

ด้วยการปิดกั้นกระบวนการทั้งหมดsaveเมื่อเทียบกับคำสั่งbgsaveเห็นได้ชัดว่าคำสั่งเหมาะสมกว่าที่เราจะใช้

127.0.0.1:6379> bgsave
Background Saving started # 提示开始后台保存 
127.0.0.1:6379>

เรียก RDB . โดยอัตโนมัติ

หลังจากพูดถึงการทริกเกอร์ด้วยตนเองแล้ว มาดูการทริกเกอร์อัตโนมัติกันเราสามารถกำหนดค่าเงื่อนไขสำหรับการทริกเกอร์อัตโนมัติในไฟล์การกำหนดค่า

1. บันทึก mn

  • บันทึก mn หมายความว่าภายใน m วินาที หากเปลี่ยนปุ่ม n ปุ่ม การคงอยู่จะถูกทริกเกอร์โดยอัตโนมัติพารามิเตอร์ m และ n สามารถพบได้ในไฟล์การกำหนดค่า Redis
  • ตัวอย่างเช่น บันทึก 60 1 หมายความว่าภายใน 60 วินาที ตราบใดที่มีการเปลี่ยนแปลงหนึ่งคีย์ การคงอยู่ของ RDB จะถูกทริกเกอร์
  • สาระสำคัญของการคงอยู่ของทริกเกอร์โดยอัตโนมัติคือหากตรงตามเงื่อนไขทริกเกอร์ที่กำหนดไว้ Redis จะดำเนินการคำสั่ง bgsave โดยอัตโนมัติหนึ่งครั้ง

หมายเหตุ: เมื่อมีการตั้งค่าคำสั่ง save mn หลายคำสั่ง เงื่อนไขใดเงื่อนไขหนึ่งจะทริกเกอร์การคงอยู่

ตัวอย่างเช่น เราตั้งค่าคำสั่ง save mn สองคำสั่งต่อไปนี้:

save 60 10
save 600 20
  • เมื่อค่าคีย์ Redis เปลี่ยนแปลง 60 ครั้งภายใน 10 วินาที การคงอยู่จะถูกทริกเกอร์
  • หากคีย์ Redis เปลี่ยนแปลงภายใน 60 วินาที และหากค่าเปลี่ยนแปลงน้อยกว่า 10 ครั้ง Redis จะกำหนดว่าคีย์ Redis ได้รับการแก้ไขอย่างน้อย 600 ครั้งภายใน 20 วินาทีหรือไม่ และหากเป็นเช่นนั้น จะทริกเกอร์การคงอยู่

2. Flushall

  • คำสั่ง flushall ใช้เพื่อล้างฐานข้อมูล Redis
  • ต้องใช้ด้วยความระมัดระวังในสภาพแวดล้อมการผลิต
  • เมื่อ Redis ดำเนินการคำสั่ง flushall จะทริกเกอร์การคงอยู่โดยอัตโนมัติและล้างไฟล์ RDB

3. ทริกเกอร์การซิงโครไนซ์ Master-slave

ในการจำลองแบบ master-slave ของ Redis เมื่อโหนดรองดำเนินการจำลองแบบเต็มรูปแบบ โหนดหลักจะดำเนินการคำสั่ง bgsave เพื่อส่งไฟล์ RDB ไปยังโหนดรอง กระบวนการนี้จะทริกเกอร์การคงอยู่ของ Redis โดยอัตโนมัติ

Redis สามารถสอบถามพารามิเตอร์การกำหนดค่าปัจจุบันผ่านคำสั่ง

รูปแบบของคำสั่งแบบสอบถามคือ:config get xxx

ตัวอย่างเช่น หากคุณต้องการรับการตั้งค่าชื่อที่เก็บข้อมูลสำหรับไฟล์ RDB คุณสามารถใช้ config get dbfilename .

ผลการดำเนินการมีดังนี้:

127.0.0.1:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"

เนื่องจากเซิร์ฟเวอร์ Redis จะบล็อกเมื่อโหลดไฟล์ RDB จนกว่าการโหลดจะเสร็จสิ้น อาจทำให้ใช้เวลานานและไม่สามารถเข้าถึงเว็บไซต์ได้

หากคุณต้องการลบไฟล์แคช RDB dump.rdb ของ Redis ด้วยตนเอง คุณสามารถใช้คำสั่งต่อไปนี้เพื่อค้นหาเส้นทางการจัดเก็บของไฟล์ dump.rdb ▼

find / -name dump.rdb
  • จากนั้น ให้ลบไฟล์แคช dump.rdb ด้วยตนเองผ่าน SSH

Redis ตั้งค่าคอนฟิกของ RDB

เกี่ยวกับการตั้งค่าคอนฟิกูเรชันของ RDB คุณสามารถใช้สองวิธีต่อไปนี้:

  1. แก้ไขไฟล์การกำหนดค่า Redis ด้วยตนเอง
  2. ใช้การตั้งค่าบรรทัดคำสั่ง config set dir "/usr/data" เป็นคำสั่งที่เก็บข้อมูลเพื่อแก้ไขไฟล์ RDB

หมายเหตุ: การกำหนดค่าใน redis.conf สามารถรับได้ผ่าน config get xxx และแก้ไขผ่าน config set xxx value และวิธีการแก้ไขไฟล์การกำหนดค่า Redis ด้วยตนเองนั้นมีผลทั่วโลก กล่าวคือ พารามิเตอร์ที่กำหนดโดยการรีสตาร์ทเซิร์ฟเวอร์ Redis จะไม่ สูญหาย แต่แก้ไขโดยใช้คำสั่ง จะหายไปหลังจาก Redis รีสตาร์ท

อย่างไรก็ตาม หากคุณต้องการแก้ไขไฟล์การกำหนดค่า Redis ด้วยตนเองเพื่อให้มีผลทันที คุณต้องรีสตาร์ทเซิร์ฟเวอร์ Redis และวิธีการคำสั่งไม่จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์ Redis

การกู้คืนไฟล์ RDB

เมื่อเซิร์ฟเวอร์ Redis เริ่มทำงาน หากมีไฟล์ RDB dump.rdb ในไดเรกทอรีรากของ Redis Redis จะโหลดไฟล์ RDB โดยอัตโนมัติเพื่อกู้คืนข้อมูลที่มีอยู่

หากไม่มีไฟล์ dump.rdb ในไดเร็กทอรีราก โปรดย้ายไฟล์ dump.rdb ไปยังไดเร็กทอรีรากของ Redis ก่อน

แน่นอนว่ามีข้อมูลบันทึกเมื่อ Redis เริ่มทำงาน ซึ่งจะแสดงว่ามีการโหลดไฟล์ RDB หรือไม่

เซิร์ฟเวอร์ Redis บล็อกขณะโหลดไฟล์ RDB จนกว่าการโหลดจะเสร็จสิ้น

ตอนนี้เราทราบแล้วว่าการคงอยู่ของ RDB นั้นแบ่งออกเป็นสองวิธี: การทริกเกอร์ด้วยตนเองและการทริกเกอร์อัตโนมัติ:

  1. ข้อดีของมันคือไฟล์จัดเก็บข้อมูลมีขนาดเล็ก และการกู้คืนข้อมูลจะเร็วขึ้นเมื่อเริ่ม Redis
  2. ข้อเสียคือมีความเสี่ยงที่ข้อมูลจะสูญหาย

การกู้คืนไฟล์ RDB ก็ง่ายมากเช่นกัน เพียงใส่ไฟล์ RDB ไว้ในไดเรกทอรีรากของ Redis แล้ว Redis จะโหลดและกู้คืนข้อมูลโดยอัตโนมัติเมื่อเริ่มทำงาน

ข้อดีและข้อเสียของ RDB

1) ข้อดีของ RDB

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

RDB มีประโยชน์มากสำหรับการกู้คืนจากความเสียหาย เป็นไฟล์บีบอัดที่สามารถถ่ายโอนไปยังเซิร์ฟเวอร์ระยะไกลได้เร็วกว่าสำหรับการกู้คืนบริการ Redis

RDB สามารถปรับปรุงความเร็วของ Redis ได้อย่างมาก เนื่องจากกระบวนการ Redis หลักจะแยกกระบวนการย่อยเพื่อคงข้อมูลไว้ในดิสก์

กระบวนการหลักของ Redis จะไม่ดำเนินการต่างๆ เช่น ดิสก์ I/O

เมื่อเทียบกับไฟล์รูปแบบ AOF ไฟล์ RDB จะรีสตาร์ทเร็วขึ้น

2) ข้อเสียของ RDB

เนื่องจาก RDB สามารถบันทึกข้อมูลได้ในช่วงเวลาหนึ่งเท่านั้น หากบริการ Redis ถูกยกเลิกโดยไม่ได้ตั้งใจในช่วงกลาง ข้อมูล Redis จะสูญหายในช่วงระยะเวลาหนึ่ง

กระบวนการที่ RDB ต้องการการ Fork บ่อยครั้งเพื่อเก็บไว้ในดิสก์โดยใช้รายการย่อย

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

แน่นอน เรายังสามารถปิดใช้งานการคงอยู่เพื่อปรับปรุงประสิทธิภาพการดำเนินการของ Redis ได้อีกด้วย

หากคุณไม่อ่อนไหวต่อการสูญเสียข้อมูล คุณสามารถทำเช่นนี้ได้เมื่อไคลเอนต์เชื่อมต่อ config set save "" คำสั่งปิดใช้งานการคงอยู่ของ Redis

redis.conf, ถ้าในsaveแสดงความคิดเห็นเกี่ยวกับการกำหนดค่าทั้งหมดในตอนเริ่มต้น และการคงอยู่จะถูกปิดใช้งานด้วย แต่โดยทั่วไปจะไม่เสร็จสิ้น

หวัง Chen Weiliang บล็อก ( https://www.chenweiliang.com/ ) แชร์ "ชื่อเต็มของ Redis RDB คืออะไร? Redis RDB In-Memory Data Persistence Operation Mode ซึ่งมีประโยชน์สำหรับคุณ

ยินดีต้อนรับสู่การแบ่งปันลิงค์ของบทความนี้:https://www.chenweiliang.com/cwl-26677.html

ยินดีต้อนรับสู่ช่อง Telegram ของบล็อกของ Chen Weiliang เพื่อรับข่าวสารล่าสุด!

🔔 เป็นคนแรกที่ได้รับ "คู่มือการใช้งานเครื่องมือ AI การตลาดเนื้อหา ChatGPT" อันทรงคุณค่าในไดเรกทอรีด้านบนของช่อง! 🌟
📚 คู่มือนี้มีคุณค่ามหาศาล 🌟 นี่เป็นโอกาสที่หายาก อย่าพลาด! ⏰⌛💨
แชร์และชอบถ้าคุณชอบ!
การแบ่งปันและไลค์ของคุณเป็นแรงจูงใจอย่างต่อเนื่องของเรา!

 

发表评论

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่ 必填项已用 * 标注