پایگاه داده redis روش های متفاوتی برای ماندگاری داده فراهم میکند:
1. در روش RDB که مخفف Redis Database Backup است، در بازه های زمانی مشخص از داده ها یک نسخه پشتیبان تهیه می شود. به عنوان مثال می توان redis را به گونه ای پیکربندی کرد که هر 30 دقیقه از کل داده ها یک نسخه در دیسک ذخیره کند.
2. در روش AOF که مخفف Append Only file است، هر عملیات write که سرور دریافت میکند، در یک فایل لاگ می شود. درنتیجه در زمان شروع مجدد سرور، میتوان از آن کل داده را بازسازی کرد. دستورات به همان فرمت redis ذخیره می شوند. Redis این قابلیت را دارد که در صورت بزرگ شدن فایل، آن را Rewrite کند.
3. امکان غیرفعال کردن ماندگاری داده نیز وجود دارد
4. امکان استفاده از هر دو روش RDB و AOF وجود دارد. در این صورت هنگام شروع مجدد سرور، از فایل AOF برای بازسازی داده ها استفاده می شود.
مزایای این روش عبارتند از:
1. RDB یک فایل جمع و جور است که داده های redis را نشان می دهد. درنتیجه برای پشتیبان گیری بسیار ایده آل است. برای مثال شما فایل های RDB را هر ساعت برای 24 ساعت گذشته آرشیو میکنید و به مدت 30 روز نگهداری میکنید. این به شما اجازه میدهد نسخه های مختلف از مجموعه داده را در مواقع disaster بازیابی کنید.
2. چون RDB فقط یک فایل است و درنتیجه میتواند به راحتی در شبکه جابجا شود و برای disaster recovery بسیار عالی است.
3. این روش از کارایی Redis را بیشینه می کند چون تنها کاری که پردازش مادر Redis برای این روش انجام می دهد، ایجاد یک child برای انجام این کار است.
4. در این روش بازیابی داده سریع تر از روش AOF است.
معایب RDB عبارتند از:
1. با توجه به اینکه در این روش در بازه های زمانی نسخه شتیبان تهیه می شود امکان از دست رفتن برخی از داده ها وجود دارد.
2. در این روش از یک پردازش Chld استفاده می شود. درصورتی که حجم فایل بزرگ باشد fork می تواند زمانبر باش و درنتیجه Redis برای چند میلی ثانیه یا حتی یک ثانیه متوقف می شود.
مزایای این روش عبارتند از:
1. این روش بسیار بادوام تر است. در این روش سیاست های مختلفی برای fsync میتوان انتخاب کرد: بدون sync، هر ثانیه، با هر کوئری. بصورت پیش فرض داده هر ثانیه sync می شود. در این صورت نهایتا داده یک ثانیه از دست می رود. روش هر ثانیه بسیار سریع است. اما روش fsync برای هر تغییر بسیار کند اما بسیار امن است.
2. در این روش در صورتی که فایل بزرگ شود بصورت خودکار Redis یک فایل جدید ایجاد می کند و نوشتن لاگ ها را در آن ادامه می دهد.
معایب این روش عبارتند از:
1. حجم فایل های AOF نسبت به معادل RDB بزگتر است.
2. عموما AOF کندتر از RDB است و بستگی به سیاست انتخابی برای fsync دارد.
3. ممکن است باگ های نادری وجود داشته باشد که با استفاده از commandهای فایل AOF نتوان همه داده را بازیابی کرد. درصورتی که همچین باگی در RDB امکان پذیر نیست. اما ادعا می شود تا کنون چنین موردی گزارش نشده است.
برای رسیدن به اطمینان کامل لازم است از هر دو روش RDB و AOF استفاده شود. درصورتی که از دست چند دقیقه از داده ها برایتان اهمیت خاصی ندارد بهتر است از RDB استفاده کنید.
استفاده تنها از روش AOF توصیه نمی شود و بهتر است در بازه های زمانی حتما از RDB استفاده شود.
با توجه به اینکه در برنامه بلند مدت Redis ترکیب این دو روش و ارائه یک روش ترکیبی قرار دارد، توصیه ما استفاده از هر دو روش به صورت همزمان می باشد.
پیکربندی پیش فرض بصورت زیر است:
save 900 1
save 300 10
save 60 10000
هر 900 ثانیه اگر حداقل 1 کلید تغییر کند.
هر 300 ثانیه اگر حداقل 10 کلید تغییر کند.
هر 10000 ثانیه اگر حداقل 60 کلید تغییر کند.
پیکربندی ما برای AOF:
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec