Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

เครื่องมือครบวงจรสำหรับวิเคราะห์ Redis RDB Files

พื้นหลัง (Background)

บางครั้ง ในการใช้ Redis เราอาจเจอปัญหา เช่น หน่วยความจำมากเกินไป หรือ bandwidth เต็ม เมื่อเจอปัญหาเหล่านี้ เราต้องวิเคราะห์หน่วยความจำของ Redis

มี 2 ประเภทของการวิเคราะห์หน่วยความจำ Redis: online analysis และ offline analysis Online analysis เชื่อมต่อโดยตรงกับ Redis server และวิเคราะห์หน่วยความจำ ซึ่งจะเพิ่มโหลดบน Redis server อาจส่งผลต่อความเสถียร Offline analysis 基于 RDB backup files 不会影响 Redis 服务器的稳定性。当使用的内存大于 2GB 时,推荐使用此方法。

เราจะวิเคราะห์หน่วยความจำ Redis แบบ offline อย่างไร? มีเครื่องมือ open source 2 ตัวที่ช่วยได้: redis-rdb-tools และ rdr

redis-rdb-tools เขียนด้วย Python, rdr เขียนด้วย Golang หากนักพัฒนาไม่คุ้นเคยกับภาษาเหล่านี้และต้องการขยายฟังก์ชัน การทำงานอาจยากขึ้น ต่อไป ผมจะแนะนำเครื่องมือวิเคราะห์ offline อีกตัวที่เขียนด้วย C# ซึ่งจะง่ายกว่าสำหรับ C# developers ในการขยาย

rdb-tools

rdb-tools คือเครื่องมือ parse/analyze redis rdb files ที่เขียนด้วย C#

ประกอบด้วย 2 ส่วน:

  • Parser library ที่คุณสามารถปรับแต่งเองได้
  • Analysis CLI tool ที่คุณสามารถวิเคราะห์การใช้งานพื้นฐานผ่าน command line

Parser library 基于 net6.0 以便我们轻松扩展它。

CLI tool 也基于 net6.0,使用 command-line-api 构建,可以打包成无运行时依赖的二进制文件。

การใช้งาน CLI tool

มี 2 วิธีติดตั้ง rdb-cli:

  1. หากไม่ได้ติดตั้ง .NET 6.0 SDK ให้ดาวน์โหลด tool จาก latest stable release ตาม OS version
  2. หากติดตั้ง .NET 6.0 SDK แล้ว ใช้ dotnet tool install --global rdb-cli เพื่อติดตั้ง

ที่นี่จะแสดงวิธีแรก

หลังดาวน์โหลดและแตกไฟล์ จะได้ไฟล์ executable ชื่อ rdb-cli

พิมพ์ ./rdb-cli -h เพื่อดู help

เครื่องมือครบวงจรสำหรับวิเคราะห์ Redis RDB Files

เห็นว่ามี 2 คำสั่ง คำสั่งสำคัญที่สุดคือ memory

เครื่องมือครบวงจรสำหรับวิเคราะห์ Redis RDB Files

จาก help จะเห็นว่าต้องระบุ RDB file และ options บางอย่าง

ตัวอย่างทั่วไป:

./rdb-cli memory /tmp/test/demo.rdb -ot html

คำสั่งนี้จะวิเคราะห์ rdb file และนำเสนอผลลัพธ์เป็น HTML

ภาพด้านล่างแสดง output ของคำสั่ง ใช้เวลาเพียง 32 วินาทีในการวิเคราะห์ RDB file ขนาด 2.1GB ซึ่งเป็นความเร็วที่ค่อนข้างเร็ว

เครื่องมือครบวงจรสำหรับวิเคราะห์ Redis RDB Files

HTML report แสดงที่ /tmp/test/res.html

มาดูรายละเอียดกัน:

เครื่องมือครบวงจรสำหรับวิเคราะห์ Redis RDB Files

เครื่องมือครบวงจรสำหรับวิเคราะห์ Redis RDB Files

เครื่องมือครบวงจรสำหรับวิเคราะห์ Redis RDB Files

เครื่องมือครบวงจรสำหรับวิเคราะห์ Redis RDB Files

HTML result มี 3 ส่วน:

ส่วนแรก: ข้อมูลพื้นฐาน รวม RDB version, Redis version, total memory, total keys

ส่วนที่สอง: ไฮสโตแกรมหลายตัว หลักๆ คือ memory และ quantity distribution ของ data types ต่างๆ และ memory/quantity distribution ของ expiration time

ส่วนที่สาม: ตารางหลายตัว รวม top key prefix list, top big key list, top stream list, และ function list (Redis 7.0)

นอกจากนี้ หากต้องการ filter เงื่อนไขบางอย่าง สามารถระบุ parameter options ต่างๆ ได้

ตัวอย่าง 2 กรณี:

1. วิเคราะห์แค่ DB 9 และ DB 10:

./rdb-cli memory /tmp/test/demo.rdb -ot html --db 9 --db 10

2. วิเคราะห์แค่ hash และ string types:

./rdb-cli memory /tmp/test/demo.rdb -ot html --type string --type hash

การวิเคราะห์ RDB files ขนาด 2-8GB เพิ่มเติมสำหรับอ้างอิง

เครื่องมือครบวงจรสำหรับวิเคราะห์ Redis RDB Files

CLI tools ข้างต้นอาจไม่ตอบโจทย์ทุกความต้องการ ในตอนนั้น เราสามารถปรับแต่งตามต้องการจาก parsing class library

การใช้งาน Parser Library

ติดตั้ง package RDBParse จาก nuget ก่อน

dotnet add package RDBParse

ต่อไป ต้องเพิ่ม implementation class ที่ implement interface IReaderCallback

จากนั้น สร้าง instance ใหม่ของ class BinaryReaderRDBParser

สุดท้าย เรียกเมธอด Parse ของ instance 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 page
  • rdb.c of redis
  • rdr github page
  • redis-rdb-tools github page