Pouya Doostdar
Pouya Doostdar
خواندن ۳ دقیقه·۲ سال پیش

ردیس: Redis Persisting Data

در سری پست های قبلی درباره راه اندازی ردیس و طریقه کار کرد ردیس و طریقه استفاده از ردیس را توضیح دادیم. پس ما یک Redis Standalone داریم که میدونیم چطوری داره کار میکنه و همچنین بلدیم باهاش کار کنیم. اما مشکلی که وجود داره اینه که ما گفتیم Redis یه دیتابیس In-memory هست پس اگر تحت هر شرایطی اگر Instance Redis ما متوقف شود، چون اطلاعات ما در Ram ذخیره شده از بین خواهد رفت!
راهکار چیست؟

در ردیس امکانی به اسم Redis persisting data داریم، این فیچر دیتا هایی که داخل رم وجود دارند را بر روی هارد دیسک نیز ذخیره میکند. ( دیسک به عنوان حافظه ذخیره ساز کاری استفاده نمیشود) به این شکل که همه دیتا هایی که داخل رم وجود دارند را به دو روش داخل دیسک ذخیره میکند.

روش اول RDB:

در این روش دیتا های شما به صورت دامپ شده در یک فایل ذخیره میشود. برای مثال اگر شما داخل دیتابیس کلید test را با value مقدار دهی کرده باشید، داخل فایل فقط و فقط کلید و ولیو شما رو ذخیره خواهد کرد. برای این که واضح تر متوجه شویم مثال زیر را ببینید:

فرض بگیریم ما کلید و مقدار زیر را ست کردیم:
SET visitors 1000

حالا میخواهیم مقدار کلید visitors را با استفاده از increment بیشتر کنیم:

INCR visitors

خوب بعد از اجرای این کد عددی که برای visitors باید باشه عدد 1001 هست که میتوانید با استفاده از عملگر GET مقدار را بررسی کنید.
با توجه به توضیحاتی که دادیم، محتوای فایلی که از ردیس خروجی داده خواهد شد به شکل زیر است:

visitors: 1001

یعنی فقط و فقط کلید و ولیو برای ما ذخیره سازی میشود.
در این روش ما یک TPS تنظیم خواهیم کرد که ردیس از دیتابیس ما بک اپ بگیرد. برای مثال اگر در 1 دقیقه 1000 رکورد تغییر کرد دیتابیس را داخل هارد ذخیره کند و یا اگر در 1 ثانیه 10 رکورد تغییر کرد دیتابیس را داخل هارد ذخیره کن، بنابراین در این روش ممکن هست در زمان وقوع disaster دیتا های شما Lost شوند.
طریقه disaster recovery در این روش به صورت اتوماتیک، زمانی که instance Redis دوباره اجرا شود فایل را خوانده و کلید و مقادیر را دوباره داخل رم مینویسد.

روش دوم AOF:

در این روش عملکرد ذخیره سازی کاملا متفاوت تر از روش قبلی هست. در این روش کلید و مقدار داخل هارد ذخیره سازی نمیشود بلکه تمام کویری هایی که باعث ایجاد تغییر یک کلید میشود را در لحظه داخل هارد ذخیره سازی میکند. مثال زیر را در نظر بگیرید:

SET visitors 1000 INCR visitors

خوب بعد از اجرای این دو دستور (هر دو دستور باعث ایجاد تغییر در دیتابیس میشود) چه اتفاقی میفتد؟
در لحظه اجرای خط اول دستور شما داخل فایل Append میشود. و هم چنین در لحظه ورود خط دوم هم همچنین.
پس بعد از اجرای این دو دستور، محتوای فایلی که از ردیس خروجی داده خواهد شد به شکل زیر است:

*3 $3 SET $5 visitors $5 1000 *2 $4 INCR $7 visitors

در این روش تمام اطلاعات شما در زمانی که کویری وارد کنید داخل هارد ذخیره سازی میشود. پس هیچ کدام از رکورد های شما قرار نیست از دست برود.
طریقه disaster recovery در این روش به صورت اتوماتیک، زمانی که instance Redis دوباره اجرا شود فایل را خوانده و تمام کویری هایی که از اول راه اندازی سرویس تا الان وارد کردید را دوباره داخل دیتابیس اجرا میکند.
در صورت استفاده از این روش، با توجه به این که تمام کویری های تغییر دیتای شما داخل هارد نوشته میشوند، ممکن اس عملگر های SET ،PUT ،DEL و باقی عملگرهایی که بر روی دیتا تغییرات انجام میدهند و همچنین سرعت بازیابی اطلاعات کند باشد.

redisذخیره سازیramdatabasestorage
عاشق برنامه نویسی و مهندسی DevOps. تقریبا 8 ساله که برنامه نویسی میکنم و حدود 2 سال هم هست که به حوزه زیر ساخت و DevOps شدیدا علاقه مند شدم :)
شاید از این پست‌ها خوشتان بیاید