مقالات

Redis دقیقا چیست؟

Redis چیست؟ مزایای استفاده از ردیس چیست؟
Redis در چند سال اخیر یکی از پرکاربردترین تکنولوژی ها بوده و با توجه به ویژگی‌های خوبی که Redis ارائه می‌دهد در کنار سادگی و عملکرد بالایی که دارد به یک ابزار کار راه‌انداز برای کاربرد های مختلف تبدیل شده است.

Redis دقیقا چیست؟
در واقع Redis یک ذخیره‌ساز ساختارهای داده‌ای در RAM هست. یعنی چی؟
ساختارهای داده‌ای یا Data Structure می‌توانند یک رشته ساده و یا یک لیستی از داده‌ باشند که Redis آن‌ها را در RAM نگهداری می‌کند و امکان دسترسی سریع به داده‌ را فراهم می‌کند. از آنجایی که داده ها را ذخیره و بازیابی می‌کند یک نوع دیتابیس هست و چون این ذخیره‌سازی در RAM اتفاق می‌افتد اصطلاحا in-memory Database نامیده می‌شود.
داده‌ها در Redis به صورت key-value ذخیره می‌شوند و برای هر داده‌ای که در Redis ذخیره می‌شود یک key یا کلید داریم که زمان بازیابی با استفاده از این key به داده‌ی موردنظرمان که همان value هست می‌رسیم و بنابراین Redis یک key value database هست.
پس Redis یک دیتابیس NoSql می‌باشد اما علاوه بر استفاده از Redis به عنوان دیتا‌بیس با توجه به ویژگی‌های آن که در ادامه مطلب با آن‌ها آشنا می‌شویم، می‌توانیم از Redis به عنوان Cache و Message Broker هم استفاده کنیم.

آیا نگه‌داری داده ها در RAM باعث از دست رفتن آن‌ها نمی‌شود؟
از آنجایی که Redis داده‌ها را روی RAM نگه‌داری می‌کند، بعد از خاموش و روشن شدن و یا هر اتفاق غیرقابل پیش‌بینی که بیافتد و RAM سیستم خالی شود، آیا داده های ما پاک می شوند؟
خیر، Redis برای نگه‌داری دائمی داده‌ها آنها را با توجه به تنظیماتی که ما برای آن مشخص می‌کنیم به دیسک اصلی سیستم منتقل می‌کند و بعد از پاک شدن RAM دوباره می‌تواند آن‌ها را منتقل کند و کار را از سر بگیرد.
این ویژگی باعث شده اصطلاحا به آن on-disk persistence بگویند و این کار را می‌تواند در سطوح مختلفی انجام دهد. این سطوح شامل موارد زیر می شوند:
۱. روش RDB: اگر قصد backup گیری از داده‌های خود به صورت فایل‌های جداگانه در فاصله‌های زمانی مشخص و بعد از تعداد مشخصی تغییر را داشته باشید می توانید از این روش استفاده کنید و کافی است به Redis بگویید که در چه بازه‌های زمانی به صورت تکراری و تا چه مدت از داده‌ها backup بگیرد.
برای مثال هر ۳۰ دقیقه و به مدت ۳۰ روز از داده‌ها ی خود می توانید backup بگیرید و در هر زمان که مشکلی پیش آمد آن‌ها را برگردانید. در واقع RDB مخفف Redis Database Backup می‌باشد به این معنی که هر بار از کل دیتا‌بیس یک dump می‌گیرد و نگه می‌دارد.
پس در این روش ممکن هست داده‌هایی رو در فواصل backup گیری از دست بدهید و اگر در لحظه داده های شما مهم هستند بهتر هست از روش بعدی استفاده کنید.
۲. روش AOF: این روش مخفف Append Only File هست و در این روش هر عملیات نوشتنی که در دیتابیس اتفاق می‌افتد در یک فایل لاگ ذخیره می‌شود و در زمان نیاز Redis می‌تواند با استفاده از این فایل دیتابیس را بازیابی کند.در این روش سرعت بازیابی کندتر از روش RDB می‌باشد ولی برای داده‌های حساس‌تر گزینه بهتری هست.
این روش قادر است با استفاده از fsync بعد از هر بار درج و یا تغییر یک key جدید در Redis آن را ذخیره کند.
۳. غیر فعال کردن Persistence Mode به طور کلی و backup نگرفتن: اگر داده‌هایی دارید که ذخیره‌سازی دائمی آن‌ها اهمیتی ندارد، می‌توانید این آپشن را غیرفعال کنید.
۴. استفاده ترکیبی از RDB و AOF

دقیقا چه انواعی از داده‌ را می‌شود در Redis ذخیره کرد؟

گفتیم که در Redis دو عنصر کلید و مقدار داریم. عنصر مقدار یا همان Value می‌تواند انواع مختلفی داشته باشد. اجازه دهید به برخی از این مقادیر و کاربردهای آن‌ها نگاهی بیندازیم:
String: اگر مقداری از نوع String بود یک رشته ساده است که می‌توانید عملیات درج/به‌هنگام سازی/حذف/دریافت را از آن کلید انجام دهید. مثلا با دستور زیر میتوانید یک کلید بسازید و یک رشته در آن درج کنید:
SET server:name “Yottab”
حال با کد زیر می‌توانید مقدار مورد نظر برای کلید server:name را به دست آورید:
GET server:name => “Yottab”

list: با استفاده از لیست میتوانید یک آرایه دلخواه داشته باشید. می‌توانید در این آرایه عنصری را اضافه یا کم کنید و عملیات مختلف دیگر را انجام دهید.
sets: اگر مقدار موجود از نوع sets باشد در واقع یک لیست بدون ترتیب دارید که هیچ کدام از عناصر آن تکراری نیستند.
sorted sets: مانند همان مقدارهایی از نوع sets است با این تفاوت که هر عنصر از مجموعه دارای وزن است و این وزن میتواند به صورت مرتب نگهداری شود. (مثلا از وزن کم به زیاد)
hashes: در واقع این نوع داده یک مپ بین فیلدهای string و مقادیر string هست. اگر با انواع JSON آشنایی داشته باشید درک مقادیر hashes برای شما راحت‌تر است. این مقادیر می‌توانند آبجکت هایی مانند JSON را در مقادیر خود داشته باشند

همچنین Redis میتواند مقادیر دیگری را نیز ذخیره و بازیابی کند. یکی از انواع آن ها، HyperLogLog است. فرض کنید میخواهید تعداد تکرار یک عنصر خاص از یک لیست را به دست آورید. اگر این لیست بسیار بزرگ باشد، این کار به راحتی انجام نمی‌پذیرد. مقادیر HyperLogLog می‌تواند با دقت بسیار بالا (اما نه ۱۰۰ درصد) تعداد تکرار یک عنصر خاص را حدس بزند. این کار با استفاده از الگوریتم های خاصی امکان‌پذیر است. انواع دیگری مانند ذخیره سازی عناصری از جنس موقعیت‌های مکانی و یا Bitmapها نیز در Redis وجود دارند که کاربردهای خاص خود را دارند.

چند مورد بیشتر در مورد Redis که باید بدانیم
با زبان C نوشته شده است.
از Lua Scripting پشتیبانی می کند.
به صورت پیش فرض replication دارد.
دارای partitioning از طریق Redis Cluster هست.
به صورت open source و تحت License BSD نگه‌داری می شود.

Redis امکانات بسیار متنوع و خاصی دارد که در مواقع مختلف میتوان از آن‌ها استفاده کرد. اطلاعات بیشتر در وب سایت https://redis.io موجود است. این پایگاه داده می تواند توسط بسیار از زبان‌های برنامه‌نویسی مورد استفاده قرار بگیرد. لیستی از زبان هایی که Redis را پشتیبانی می‌کنند در اینجا آمده است.