พื้นหลัง
บางครั้งในกระบวนการใช้ Redis เราอาจประสบปัญหา เช่น หน่วยความจำมากเกินไปหรือแบนด์วิดท์เต็ม เมื่อเราประสบปัญหาเหล่านี้ เราจำเป็นต้องวิเคราะห์หน่วยความจำของ Redis
การวิเคราะห์หน่วยความจำสำหรับ Redis มีสองประเภท:การวิเคราะห์ออนไลน์และการวิเคราะห์ออฟไลน์ การวิเคราะห์แบบออนไลน์เชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ Redis และวิเคราะห์หน่วยความจำ ซึ่งจะเพิ่มภาระงานบนเซิร์ฟเวอร์ Redis สิ่งนี้อาจส่งผลต่อความเสถียรของเซิร์ฟเวอร์ Redis การวิเคราะห์แบบออฟไลน์อิงตามไฟล์สำรอง RDB ซึ่งจะไม่ส่งผลต่อความเสถียรของเซิร์ฟเวอร์ Redis ขอแนะนำเมื่อหน่วยความจำที่ใช้มีขนาดใหญ่กว่า 2GB
เราจะวิเคราะห์หน่วยความจำของ Redis แบบออฟไลน์ได้อย่างไร มีเครื่องมือที่รู้จักกันดี 2 ชิ้นในโลกโอเพ่นซอร์สที่ช่วยเราได้ ได้แก่ redis-rdb-tools และ rdr
redis-rdb-tools ใช้งานโดย Python และ rdr ใช้งานโดย Golang หากนักพัฒนาไม่คุ้นเคยกับสองภาษานี้ และต้องการขยายฟังก์ชันบางอย่างตามภาษาเหล่านั้น กระบวนการนี้อาจยากขึ้น ต่อไป ฉันจะแนะนำเครื่องมือวิเคราะห์ออฟไลน์อีกตัวที่ c# ใช้งาน ซึ่งจะช่วยให้นักพัฒนา c# ขยายได้ง่ายขึ้น
เครื่องมือ rdb
rdb-tools เป็นเครื่องมือสำหรับแยกวิเคราะห์/วิเคราะห์ไฟล์ redis rdb ที่ c# ใช้งาน
ประกอบด้วยสองส่วน:
- ไลบรารีตัวแยกวิเคราะห์ที่คุณสามารถปรับแต่งได้ด้วยตัวเอง
- เครื่องมือ anslysis cli ที่คุณสามารถวิเคราะห์การใช้งานพื้นฐานบางอย่างสำหรับบรรทัดคำสั่งได้
ไลบรารีตัวแยกวิเคราะห์จะขึ้นอยู่กับ net6.0 เพื่อให้เราสามารถขยายได้อย่างง่ายดาย
เครื่องมือ cli ยังอิงตาม net6.0 อีกด้วย ซึ่งสร้างขึ้นโดยใช้ command-line-api และสามารถจัดแพ็กเกจเป็นไฟล์ไบนารีโดยไม่ต้องพึ่งพารันไทม์
การใช้งานเครื่องมือ CLI
มีสองวิธีในการติดตั้ง rdb-cli .
- หากคุณไม่ติดตั้ง .NET 6.0 SDK ให้ดาวน์โหลดเครื่องมือจากเวอร์ชันเสถียรล่าสุดโดยอิงตามเวอร์ชันระบบปฏิบัติการของคุณ
- หากคุณติดตั้ง .NET 6.0 SDK คุณสามารถใช้
dotnet tool install --global rdb-cliเพื่อติดตั้ง
ที่นี่เราจะแสดงวิธีแรก
หลังจากดาวน์โหลดและแตกไฟล์แล้ว คุณจะได้ไฟล์ปฏิบัติการชื่อ rdb-cli .
ป้อน ./rdb-cli -h เพื่อรับข้อมูลความช่วยเหลือ

อย่างที่คุณเห็นมีสองคำสั่งที่เราสามารถใช้ได้ คำสั่งที่สำคัญที่สุดคือหน่วยความจำ .

จากข้อมูลวิธีใช้ คุณจะเห็นได้ว่าคุณต้องระบุไฟล์ RDB และตัวเลือกเฉพาะบางอย่าง
ตัวอย่างง่ายๆ ทั่วไปมีดังนี้:
./rdb-cli memory /tmp/test/demo.rdb -ot html คำสั่งนี้จะวิเคราะห์ไฟล์ rdb และผลการวิเคราะห์จะถูกนำเสนอในรูปแบบของ HTML
ภาพหน้าจอด้านล่างแสดงผลลัพธ์ของคำสั่งดำเนินการ เห็นได้ชัดว่าใช้เวลาเพียง 32 วินาทีในการวิเคราะห์ไฟล์ RDB ขนาด 2.1GB ซึ่งเป็นความเร็วที่ค่อนข้างรวดเร็ว

เอาต์พุตรายงาน HTML โดยละเอียดใน /tmp/test/res.html ป>
มาดูกันดีกว่า




ผลลัพธ์ HTML ประกอบด้วยสามส่วน:
ส่วนแรกคือข้อมูลพื้นฐาน รวมถึงข้อมูลเวอร์ชัน RDB ข้อมูลเวอร์ชัน Redis หน่วยความจำทั้งหมด และจำนวนคีย์ทั้งหมด
ส่วนที่สองคือฮิสโตแกรมบางส่วน ซึ่งส่วนใหญ่เป็นการกระจายหน่วยความจำและปริมาณของประเภทข้อมูลที่แตกต่างกัน ตลอดจนการกระจายหน่วยความจำและปริมาณของเวลาหมดอายุ
ส่วนที่สามคือตารางบางส่วน รวมถึงรายการคำนำหน้าคีย์บนสุด รายการคีย์หลักบนสุด รายการสตรีมยอดนิยม และรายการฟังก์ชัน (redis 7.0)
นอกจากนี้ หากคุณไม่ต้องการวิเคราะห์ข้อมูลทั้งหมดและต้องการกรองเงื่อนไขบางอย่าง คุณสามารถระบุตัวเลือกพารามิเตอร์อื่นได้
สองตัวอย่าง:
1. เมื่อคุณต้องการวิเคราะห์ DB 9 และ DB 10 เท่านั้น:
./rdb-cli memory /tmp/test/demo.rdb -ot html --db 9 --db 10
2. เมื่อคุณต้องการวิเคราะห์เฉพาะประเภทแฮชและสตริง:
./rdb-cli memory /tmp/test/demo.rdb -ot html --type string --type hash มีการเสริมการวิเคราะห์ไฟล์ RDB ขนาด 2~8GB เพื่อการอ้างอิง

เครื่องมือ CLI ที่อธิบายไว้ข้างต้นอาจไม่เหมาะกับความต้องการของคุณโดยสิ้นเชิง ในขณะนี้ เราสามารถปรับแต่งข้อกำหนดการปรับแต่งของเราตามไลบรารีคลาสการแยกวิเคราะห์ได้
การใช้งานไลบรารีตัวแยกวิเคราะห์
ติดตั้ง RDBParse แพ็คเกจจาก nuget ในตอนแรก
dotnet add package RDBParse
ถัดไป คุณต้องเพิ่มคลาสการใช้งานเพื่อใช้งาน IReaderCallback อินเตอร์เฟซ
จากนั้นสร้างอินสแตนซ์ใหม่ของ BinaryReaderRDBParser ชั้นเรียน
ในที่สุด โทร Parse วิธีการ BinaryReaderRDBParser อินสแตนซ์ของ
ตามตัวอย่างโค้ดด้านล่างนี้
public class MyReaderCallBack : IReaderCallback
{
}
var path = "/yourpath/your.rdb"
var cb = new MyReaderCallBack();
var parser = new RDBParser.BinaryReaderRDBParser(cb);
parser.Parse(path); สรุป
บทความนี้จะแนะนำเครื่องมือวิเคราะห์ RDB ที่ใช้ c# และเข้าใจการใช้งานพื้นฐานและวิธีการปรับแต่ง
ฉันหวังว่านี่จะช่วยคุณได้!
ข้อมูลอ้างอิง ป>
- หน้า rdb-tools github
- rdb.c ของ redis
- หน้า rdr github
- หน้า redis-rdb-tools github