کلمهی Redis مخفف Remote Dictionary Server (سرور دیکشنری از راه دور) است. Redis یک منبع ذخیرهی اطلاعات open-source (متن باز) ارزشمند است که به عنوان database (دیتابیس)، cache (حافظهی موقت) و رد و بدل کردن پیامها مورد استفاده قرار میگیرد. حالا Redis قادر است که در زیر یک هزارم ثانیه میلیونها درخواست را که در یک ثانیه و به عنوان مثال در بازی، فناوری تبلیغاتی، خدمات مالی، خدمات درمانی، و IoT اتفاق میافتد، پاسخ دهد. Redis تبدیل به یک گزینهی محبوب برای caching، بازی، تابلوی امتیازات، تجزیه و تحلیل به موقع، اطلاعات مربوط به یک مکان مشخص، خدمات پیامرسانی و به اشتراک گذاشتن رسانهها شده است.
Redis چطور کار میکند؟
از ابتدا Redis به عنوان دیتابیسی ثابت و بادوام ساخته نشده بود. تمام اطلاعات Redis، بر خلاف دیتابیسها که اطلاعاتشان را در دیسک یا SSD ذخیره میکنند، روی حافظهی رم (in-memory) میباشد. با حذف کردن نیاز دسترسی به دیسک، احتمال تاخیر را از بین میبرند و در یک میلیونیم ثانیه به اطلاعات دسترسی پیدا میکنند. Redis با داشتن ساختار همهکارهی اطلاعات، دسترسی عالی، Lua scripting، تراکنشها، ماندگاری و دوام در دیسک، پشتیبانی گروهی، کار را برای برنامههای مقیاسی اینترنتی راحت تر میکند.
Redis در برابر Memcached
هر دو ذخایر اطلاعات in-memory (حافظهی رم) و open-source (متن باز) هستند. Memcached خدماتی با عملکرد بالا است که برای سادگی و آسانی کار در بخش حافظهی رم طراحی شده است. اما Redis ویژگیهای سنگینی را ارائه میدهد که مناسب دامنهی وسیعی از موارد میباشد. هردوی آنها از دیتابیسهای key-value (کلید-دادهای) یا وابسته برای پیشرفت عملکردشان استفاده میکنند، مانند: MySQL, Postgres, Aurora, Oracle, SQLServer, DynamoDB.
مزایای Redis
ذخیرهی in-memory اطلاعات
در Redis، برخلاف دیتابیسهایی مانند PostgreSQL، Cassandra، MongoDB و غیره که بیشتر اطلاعات را در دیسک یا روی SSD ذخیره میکنند، تمام اطلاعات سرور در حافظهی اصلی قرار دارند. برخلاف دیتابیسهای سنتی که بر پایهی دیسک هستند و بیشتر عملکردها باید یک رفت و برگشت به دیسک داشته باشند، ذخایر اطلاعات in-memory مثل Redis چنین چیزی را متحمل نمیشوند. بنابراین، آنها میتوانند مقادیر بیشتری کارکرد و همچنین سرعت بالاتری در پاسخگویی داشته باشند. نتیجه آن شامل عملکردی پرسرعت با متوسط عملکرد read/write که کمتر از یک میلیونیم ثانیه وقت میبرند و پشتیبانی از میلیونها عملکرد در یک ثانیه است.
انعطاف ساختار اطلاعات
متضاد با ذخایر اطلاعات ساده که ساختارهای محدودی را ارائه میدهند، Redis تنوع وسیعی در ساختار اطلاعات دارد که بتواند همهی نیازهای شما را برطرف کند. انواع اطلاعات Redis شامل موارد زیر میباشد:
- Strings: متن یا اطلاعات باینری تا حجم ۵۱۲ مگابایت.
- Lists: مجموعهای از Stringها به ترتیب اضافه شدن.
- Sets: یک مجموعهی نامنظم از stringها با قابلیت تقسیم شدن، متصل شدن به دیگر مجموعهها
- Sorted Sets: مجموعههای منظم شده بر اساس دادهها.
- Hash: یک ساختار اطلاعات برای یک لیست از رشتهها و دادهها.
- Bitmaps: یک مدل از اطلاعات که عملکردهای bit level را ارائه میدهد.
- HyperLogLogs: یک ساختار اطلاعات احتمالی برای ارزیابی موارد خاص در data set.
سادگی و راحتی استفاده
Redis شما را قادر میسازد تا با نوشتن کدی کوتاهتر برای ذخیره، دسترسی و استفادهی اطلاعات، کدتان را برایتان ساده میکند. برای ذخیره کردن، دسترسی و استفاده از اطلاعات میاز به کدنویسی کمتر و کوتاهتری میباشد. تفاوت در این است که توسعهدهندگان که از Redis استفاده میکنند، به جای زبان مورد استفاده در دیتابیسهای سنتی، از یک command structure ساده استفاده میکنند. به عنوان مثال شما میتوانید با استفاده از ساختار اطلاعاتی Redis hash، اطلاعات را به یک data store با استفاده از تنها یک خط کدنویسی منتقل کنید.برای مورد مشابهی که Redis hash data structure ندارد، نیاز به چندین خط کدنویسی دارد تا بتواند این کار را انجام دهد. Redis دارای ساختار اطلاعاتی مخصوص به خود و گزینههای فراوان برای اداره کردن و اثرگذاری بر روی اطلاعات شما است.
دوام و Replication
Redis معماری یک replicaی ابتدایی را به کار میگیرد و وقتی اطلاعات بتوانند در چندین سرور replica تکثیر شوند، به replication نامتقارن اتکا میکند. این کار باعث میشود سرعت عملکرد read بالا برود(چون requestها به چندین سرور توزیع شدهاند). وقتی سرور اولیه دچار قطعی میشود، ریکاوری سریعتر رخ میدهد.
مقیاسپذیری و دسترسی بالا
شما با استفاده از Redis میتوانید راهحلهایی کاملا در دسترس بسازید که اعتبار و عملکرد مداوم را به شما ارائه میدهد. وقتی که نیاز باشد سایز cluster خود را تنظیم کنید، گزینههای زیادی برای کم و زیاد کردن مقیاس در دسترس خواهد بود. این به شما این اجازه را میدهد که clusterتان با نیازهای شما رشد کند.
Open source
Redis یک پروژهی open source است که از فرمتهای open data پشتیبانی میکند.
موردهای محبوب استفاده از Redis
Caching
به دلیل در دسترس بودن عالی، Redis از بهترین گزینهها برای پیادهسازی اطلاعات در حافظهی رم میباشد. با این کار میتوان تاخیر برای دسترسی به اطلاعات را کاهش داد و بارگیری دیتابیس NoSQL را ساده کرد.
چت و پیامرسانی
Redis به دلیل پشتیبانی از Pub/Sub، ساختارهای اطلاعاتی متنوع و غیره، در چترومها عملکردی بسیار قوی از خود نشان میدهد و بیدرنگ کامنتها و feed رسانههای اجتماعی را بهروزرسانی میکند.
تابلوی امتیازات در بازی
Redis گزینهای محبوب در میان سازندگان بازی که به دنبال بهروزرسانی بهموقع هستند، است. این ویژگی را برای تابلوی امتیازات بازی خود با آپدیتهای بی درنگ میخواهند. شما به راحتی میتوانید با استفاده از Redis Sorted Set data structure که دارای عناصر منحصر به فرد است، یک لیست مرتب شده از افراد را بر اساس امتیازاتشان بسازید. با اینکار، با هر تغییر کوچک در امتیاز هر فرد، آن امتیاز در همان لحظه آپدیت میشود.
توانایی stream کردن محتوای سنگین
Redis ذخیرهی محتوا در رم را برای موارد stream کردن زنده به شما ارائه میدهد. Redis میتواند برای ذخیره کردن metadata مربوط به پروفایل افراد و تاریخچهی بازدید میلیونها کاربر استفاده شود. همچنین با بازنمود کردن این فایلها CDNها را فعال کنند که باعث میشوند به راحتی ویدیوها در میلیونها دستگاه و موبایل stream شود.
یادگیری ماشینی
اپلیکیشنهای مدرن داده محور به یادگیری ماشینی (یادگیریای که توسط سیستم انجام شود) نیاز دارند تا بتوانند حجم زیاد، سرعت و تنوع داده و تصمیمگیری خودکار را پردازش کنند. برای مواردی مثل کشف کلاهبرداری و تقلب در امور مالی یا بازی، مناقصهی به موقع در ad-tech، جفت پیدا کردن در برنامههای دوستیابی یا اشتراکگذاری سفر، توانایی پردازش دادههای زنده و تصمیمگیری در یک دهم میلی ثانیه، از Redis میتوان استفاده کرد.
تحلیل لحظهای
Redis یک انتخاب ایدهآل برای تحلیل لحظهای مواردی مثل تحلیلهای شبکهی اجتماعی، هدفگذاری تبلیغات، شخصی سازی و IoT میباشد.
زبانهای پشتیبانی شده در Redis
Python
Java
PHP
Perl
Go
Ruby
C/C#/C++
JavaScript
Node.js