পটভূমি
রেডিস ব্যবহার করার প্রক্রিয়ায়, আমরা কখনো কখনো সমস্যা সম্মুখীন হই, যেমন অতিরিক্ত মেমরি ব্যবহার বা ব্যান্ডউইডথ পূর্ণ। এই সমস্যা সম্মুখীন হলে, আমাদের রেডিসের মেমরি বিশ্লেষণ করতে হয়।
রেডিসের মেমরি বিশ্লেষণের দুটি ধরন রয়েছে: অনলাইন বিশ্লেষণ এবং অফলাইন বিশ্লেষণ। অনলাইন বিশ্লেষণ সরাসরি রেডিস সার্ভারের সাথে সংযোগ করে এর মেমরি বিশ্লেষণ করে, যা রেডিস সার্ভারের লোড বাড়ায়। এটি রেডিস সার্ভারের স্থিতিশীলতাকে প্রভাবিত করতে পারে। অফলাইন বিশ্লেষণ RDB ব্যাকআপ ফাইলগুলোর উপর ভিত্তি করে, যা রেডিস সার্ভারের স্থিতিশীলতাকে প্রভাবিত করে না। এটি পরামর্শ দেওয়া হয় যখন ব্যবহৃত মেমরি ২GB-র চেয়ে বেশি হয়।
রেডিসের মেমরি অফলাইন বিশ্লেষণ কীভাবে করব? ওপেন সোর্স বিশ্বে দুটি সুপরিচিত টুল রয়েছে যা আমাদের সাহায্য করতে পারে: redis-rdb-tools এবং rdr।
redis-rdb-tools পাইথনে বাস্তবায়িত, এবং rdr Golang-এ বাস্তবায়িত। যদি ডেভেলপাররা এই দুটি ভাষার সাথে পরিচিত না হন এবং তাদের উপর ভিত্তি করে কিছু ফাংশন্যালিটি প্রসারিত করতে চান, তবে প্রক্রিয়াটি আরও কঠিন হতে পারে। এখানে, আমি C#-তে বাস্তবায়িত একটি অন্য অফলাইন বিশ্লেষণ টুল পরিচয় করিয়ে দিচ্ছি যা C# ডেভেলপারদের জন্য প্রসারিত করা সহজ হবে।
rdb-tools
rdb-tools হলো একটি টুল যা রেডিস RDB ফাইল পার্স/বিশ্লেষণ করে এবং এটি C#-তে বাস্তবায়িত।
এটির দুটি অংশ রয়েছে:
- একটি পার্সার লাইব্রেরি, যা আপনি নিজেরাই কাস্টমাইজ করতে পারেন।
- একটি অ্যানালাইসিস CLI টুল, যা কম্যান্ড লাইনের জন্য কিছু বেসিক ব্যবহার বিশ্লেষণ করতে পারে।
পার্সার লাইব্রেরি net6.0 ভিত্তিক তাই আমরা সহজে এটিকে প্রসারিত করতে পারি।
CLI টুলটিও net6.0 ভিত্তিক, যা command-line-api ব্যবহার করে তৈরি করা হয়েছে এবং রানটাইম ডিপেন্ডেন্সি ছাড়া বাইনারি ফাইল হিসেবে প্যাকেজ করা যায়।
CLI টুলের ব্যবহার
rdb-cli ইনস্টল করার দুটি উপায় রয়েছে।
- আপনার যদি .NET 6.0 SDK ইনস্টলড না থাকে, তবে আপনার OS ভার্সন অনুযায়ী লেটেস্ট স্টেবল রিলিজ থেকে টুলটি ডাউনলোড করুন।
- আপনার যদি .NET 6.0 SDK ইনস্টলড থাকে, তবে
dotnet tool install --global rdb-cliব্যবহার করে ইনস্টল করতে পারেন।
এখানে আমরা প্রথম উপায়টি দেখাব।
ডাউনলোড ও এক্সট্র্যাক্ট করার পর, আপনি rdb-cli নামে একটি এক্সিকিউটেবল ফাইল পাবেন।
সাহায্য তথ্য পেতে ./rdb-cli -h ইনপুট দিন।

আপনি দেখতে পাচ্ছেন, দুটি কমান্ড আছে যা আমরা ব্যবহার করতে পারি। সবচেয়ে গুরুত্বপূর্ণ কমান্ড হলো memory।

সাহায্য তথ্য থেকে আপনি দেখতে পাচ্ছেন, আপনাকে RDB ফাইল এবং কিছু নির্দিষ্ট অপশন নির্দিষ্ট করতে হবে।
একটি সহজ এবং সাধারণ উদাহরণ নিচে:
./rdb-cli memory /tmp/test/demo.rdb -ot html
এই কমান্ডটি RDB ফাইলটি বিশ্লেষণ করবে, এবং বিশ্লেষণের ফলাফল HTML ফরম্যাটে উপস্থাপন করা হবে।
নিচের স্ক্রিনশটে এক্সিকিউশন কমান্ডের আউটপুট দেখানো হয়েছে। এটি স্পষ্ট যে ২.১ GB RDB ফাইল বিশ্লেষণ করতে এটি মাত্র ৩২ সেকেন্ড নেয়, যা আপেক্ষিক দ্রুত গতি।

বিস্তারিত HTML রিপোর্ট আউটপুট /tmp/test/res.html-এ
আসুন এক নজর দেই।




HTML রেজাল্ট তিনটি অংশ নিয়ে গঠিত:
প্রথম অংশ হলো বেসিক ইনফরমেশন, যার মধ্যে RDB ভার্সন ইনফরমেশন, রেডিস ভার্সন ইনফরমেশন, টোটাল মেমরি এবং টোটাল কী সংখ্যা।
দ্বিতীয় অংশ হলো কিছু হিস্টোগ্রাম, মূলত ভিন্ন ডেটা টাইপের মেমরি এবং পরিমাণ বিতরণ, সেইসাথে এক্সপিরেশন টাইমের মেমরি এবং পরিমাণ বিতরণ।
তৃতীয় অংশ হলো কিছু টেবিল, যার মধ্যে টপ কী প্রিফিক্স লিস্ট, টপ বIg কী লিস্ট, টপ স্ট্রিম লিস্ট, এবং ফাংশন লিস্ট (রেডিস ৭.০)।
অতিরিক্তভাবে, আপনি যদি সকল ইনফরমেশন বিশ্লেষণ না করে কিছু কন্ডিশন ফিল্টার করতে চান, তবে আপনি ভিন্ন প্যারামিটার অপশন নির্দিষ্ট করতে পারেন।
দুটি উদাহরণ:
১. যখন আপনি শুধু DB ৯ এবং DB ১০ বিশ্লেষণ করতে চান:
./rdb-cli memory /tmp/test/demo.rdb -ot html --db 9 --db 10
২. যখন আপনি শুধু হ্যাশ এবং স্ট্রিং টাইপ বিশ্লেষণ করতে চান:
./rdb-cli memory /tmp/test/demo.rdb -ot html --type string --type hash
২~৮ GB RDB ফাইল বিশ্লেষণের রেফারেন্সের জন্য συμπূরক।

উপরোক্ত CLI টুলগুলো আপনার প্রয়োজনীয়তার জন্য সম্পূর্ণভাবে উপযুক্ত নাও হতে পারে। এই সময়, আমরা পার্সিং ক্লাস লাইব্রেরি ভিত্তি করে আমাদের কাস্টমাইজেশন প্রয়োজনীয়তা বাস্তবায়ন করতে পারি।
পার্সার লাইব্রেরির ব্যবহার
প্রথমে NuGet থেকে RDBParse প্যাকেজ ইনস্টল করুন।
dotnet add package RDBParse
পরবর্তী, আপনাকে IReaderCallback ইন্টারফেস বাস্তবায়ন করে একটি ইমপ্লিমেন্টেশন ক্লাস যোগ করতে হবে।
তারপর, BinaryReaderRDBParser ক্লাসের একটি নতুন ইনস্ট্যান্স তৈরি করুন।
শেষে, BinaryReaderRDBParser-এর ইনস্ট্যান্সের Parse মেথড কল করুন।
উদাহরণস্বরূপ নিচের কোড:
public class MyReaderCallBack : IReaderCallback { }
var path = "/yourpath/your.rdb"
var cb = new MyReaderCallBack();
var parser = new RDBParser.BinaryReaderRDBParser(cb);
parser.Parse(path);
সারসংক্ষেপ
এই নিবন্ধে একটি C#-ভিত্তিক RDB বিশ্লেষণ টুল পরিচয় করানো হয়েছে এবং এর বেসিক ব্যবহার এবং কীভাবে কাস্টমাইজ করা যায় সেটি বোঝানো হয়েছে।
আশা করি এটি আপনাকে সাহায্য করবে!
রেফারেন্স
- rdb-tools github page
- rdb.c of redis
- rdr github page
- redis-rdb-tools github page