چند سالی میشود که ردیس به یکی از ابزارهای پرکاربرد در دنیای برنامهنویسی تبدیل شده است. دلایل بسیاری برای این محبوبیت ردیس وجود دارد که بخشی از آن به کاربردهای متنوع و راحتی استفاده از آن بازمیگردد. در ادامه بیشتر با Redis آشنا میشویم.
ردیس چیست؟
Redis، سرواژه Remote Dectionary Server، دیتابیسی در-حافظه، متنباز و بهصورت key-value است. پروژه ساخت ردیس زمانی شروع شد که سالواتوره سانفیلیپو، توسعهدهنده اولیه و اصلی ردیس، بهدنبال بهبود مقیاسپذیری استارتاپ ایتالیایی خودش بود.ردیس با زبان ANSI C نوشته شده است و از ساختار دادههایی چون رشته، هش، لیست، ست، و لیستهای مرتبشده پشتیبانی میکند.
کاربردهای ردیس؛ از سرویس کش تا دیتابیس اصلی
redis از آن دست ابزارهایی است که کاربردهای مختلفی دارد. در ادامه به کاربردهای سهگانه اصلی ردیس خواهیم پرداخت.
استفاده از ردیس بهعنوان سرویس caching
تصور کنید که شما یک وب اپلیکیشن دارید. گاهی وقتها، این وباپلیکیشن شما نیاز دارد تا دادههایی را از دیتابیس بازیابی کند و پاسخی به کاربر بدهد. در حالت عادی، وقتی که وب اپلیکیشن شما به دیتابیس کوئری میزند، بهنسبت زمان زیادی طول میکشد تا از دیتابیس پاسخی دریافت کند. حتماً شما هم موافقید که طولانی شدن پاسخ به درخواستهای کاربر اصلاً تجربه کاربری خوشایندی نمیتواند باشد.
حال تصور کنید که وباپلیکشنی با هزاران بازدیدکننده در روز دارید و باید درخواستهای همه آنها را مدیریت کرده و در سریعترین زمان ممکن پاسخ دهید.
یکی از کاربردهای ردیس همین است. با استفاده از redis سرعت پاسخگویی وباپلیکیشن شما به درخواستهای کاربران به شکل چشمگیری افزایش مییابد. اما ردیس چطور این کار را انجام میدهد؟
در حالتی که از redis استفاده نمیشود، شما مستقیماً به دیتابیس کوئری میزنید. وقتی که از ردیس استفاده میکنیم، redis بین دیتابیس و وباپلیکیشن ما مینشیند. یعنی بهجای اینکه درخواستها به دیتابیس اصلی برود به سمت ردیسی که بالا آوردیم میرود.
ویژگی در-حافظه بودن ردیس اینجا به کار میآید. در اینجا redis بخشی از اطلاعات، مانند عناصر ایستا و تکراری سایت، را در رم ذخیره میکند و بلافاصله میتواند پاسخ کاربر را بدهد؛ یعنی دیگر نیاز نیست برای هر درخواستی به دیتابیس اصلی درخواست داده شود. البته گاهی وقتها پیش میآید که دیتای موردنظر کاربر در کش ردیس نیست. در این حالت redis از دیتابیس میخواهد داده موردنظر را برای کاربر نمایش دهد.
استفاده از ردیس بهعنوان سرویس کش، معمولترین نوع استفاده از redis است. با این حال شاید برایتان جالب باشد که بدانید از ردیس میتوان بهعنوان دیتابیس اصلی نیز استفاده کرد. redis از فرمتهای مختلف داده پشتیبانی میکند و میتوان از آن برای اپلیکیشنهای پیچیده نیز استفاده کرد.
استفاده از ردیس بهعنوان دیتابیس اصلی
بگذارید این کاربرد ردیس را هم با یک مثال جلو ببریم. فرض کنید ما یک شبکه اجتماعی با چند میلیون کاربر داریم. این اپ ما از دیتابیس رابطهای MySQL برای ذخیره دادهها استفاده میکند؛ از آنجایی که در این اپلیکیشن، ما نیاز داریم بهصورت روزانه حجم زیادی داده جمعآوری و ذخیره کنیم، برای جستوجو و فیلتر سریعتر دادهها به دیتابیس الاستیک سرچ (Elasticsearch) هم نیاز داریم.
از طرف دیگر، کاربران در شبکه اجتماعی ما ارتباطهایی با هم دارند و به شکلهای مختلف به هم وصل میشوند بنابراین ما به یک دیتابیس گراف هم نیاز داریم . فرض کنید برای حل این مشکل ما یک Neo4j هم بالا میآوریم. ولی داستان به همینجا هم ختم نمیشود. کاربران ما بهصورت روزانه در حال به اشتراکگذاری محتواهای چندرسانهای هستند. بنابراین باید یک دیتابیس برای داکیومنت هم داشته باشیم. پس یک دیتابیس MongoDB هم برای این کار در نظر میگیریم. دست آخر، باید یک سرویس کش برای عملکرد بهتر هم داشته باشیم؛ پس یک ردیس هم باید در کنار این دیتابیسها باشد.
بله حدس شما درست است! طبیعتاً این معماری پیچیده نمیتواند بهترین راهحل برای حل مشکلات ما باشد. چنین ساختاری چالشهای زیادی دارد. مثلاً:
- همه این سرویسهای دیتا، نیاز به استقرار و نگهداری مستمر دارند.
- به نیروی متخصص بیشتری نیاز دارید چرا که باید درباره همه این دیتابیسها شناخت داشته باشید.
- هر کدام از این سرویسها زیرساختهای متفاوتی برای مقیاسپذیری نیاز دارند.
- از طرف دیگر کدهای شما نیز پیچیدهتر خواهد شد. چون این دیتابیسها علاوه بر اینکه باید با سرویسهای مختلف در ارتباط باشند باید با همدیگر نیز در تعامل باشند.
- مشکل دیگر سرعت پایین اپلیکیشن شما خواهد بود.
در این حالت شما میتوانید از دیتابیسهای چند-مدلی مانند redis استفاده کنید. اگر از ردیس استفاده کنید دیگر شما چند دیتابیس نخواهید داشت و در واقع فقط با یک دیتابیس سروکار خواهید داشت.
سیستم ما دیگر پیچیده نخواهد بود و سرعت نیز افزایش پیدا خواهد کرد. چون دیگر نیازی به ارتباطات پیچیده میان دیتابیسهای مختلف نخواهید داشت. redis این اجازه را به شما میدهد تا ساختاردادهها و فرمتهای مختلفی از دادهها را ذخیره کنید.
چطور redis از ساختار دادههای مختلف پشتیبانی میکند؟
ردیس یک هسته به نام redis core دارد که از ساختاردادههای مختلف و معمول پشتیبانی میکند. نقطه قوت redis در این است که شما میتوانید از طریق ماژولهای ردیس پشتیبانی از فرمتهای مختلف دادهها را گسترش دهید. بهعنوان مثال ماژول rediSearch همان کار الاستیک سرچ را انجام میدهد. یا redisGraph از دادههای گراف پشتیبانی میکند.
استفاده از ردیس بهعنوان رابط پیام یا Message Broker
Message Broker نرمافزاری است که کمک میکند تا اپلیکیشنها، سیستمها و سرویسها با همدیگر تعامل داشته باشند و اطلاعات ردوبدل کنند. رابط پیام این کار را از طریق ترجمه پیامها میان پروتکلهای مختلف انجام میدهد. با استفاده از رابط پیام اپلیکیشنهای شما میتوانند مستقیماً با همدیگر صحبت کنند، حتی اگر این اپلیکیشنها به زبانهای مختلف نوشته شده باشند یا در پلتفرمهای متفاوت مستقر باشند. نکته مهم درباره Message Broker این است که این ابزار تضمین میکند که حتماً پیام به دریافتکننده رسیده باشد، حتی اگر گیرنده آنلاین نباشد. این کارکرد Message Broker شبیه ایمیل است. شما چه آنلاین و اکتیو باشید چه آفلاین، به هر حال ایمیل را دریافت میکنید. قابلیتهایی که ردیس دارد آن را به یکی از محبوبترین Message Brokerها تبدیل کرده است.
مزایای استفاده از ردیس
- ردیس بسیار سریع است
- استفاده از redis بسیار آسان است
- redis بسیار انعطافپذیر است و تقریباً از همه ساختار دادهها پشتیبانی میکند
- در redis میتوان جفتهای key-value به بزرگی 512 مگابایت ذخیره کرد.
- بهجای سیستمهای هشینگ معمول، ردیس از سیستم هشینگ خاص خود (Redis Hashing) استفاده میکند که باعث سرعت بالای ردیس میشود.
- با استفاده از قابلیت clustering، میتوان مدت زمان در دسترس نبودن سرویس (downtime) را به صفر رساند.
- redis متن-باز است و لازم نیست هزینهای بابت استفاده از نسخه غیرتجاری آن پرداخت کنید.
معایب استفاده از ردیس
- بهخاطر in-memory بودنِ ردیس هنگام استفاده از آن به گنجایش رم بسیاری نیاز است.
- وارد کردن اطلاعات به Redis ساده نیست. این دیتابیس برای ذخیره و ساختارمندی اطلاعاتتان به مهارتهای معماری سیستم نیاز دارد.
روشهای استفاده از ردیس
راههای مختلفی برای استقرار و استفاده از redis وجود دارد. یکی از آسانترین و سریعترین راهها استفاده از اپلیکیشن داکرایز شده ردیس است. این روش بهخاطر سادگیاش برای افرادی هم که بهتازگی با Redis آشنایی پیدا کردهاند و در حال یادگیری آن هستند بسیار مناسب است.
اگر هم کسبوکاری دارید و میخواهید در آن از ردیس استفاده کنید میتوانید از پلتفرم ابری دارکوب استفاده کنید. در این پلتفرم شما علاوه بر اینکه سرویسهای خودتان را در آن مستقر میکنید، داکر ایمیج سرویسهای مشهور و پرکاربر، مثل redis، نیز در آن بهصورت آماده وجود دارد و میتوانید از آن استفاده کنید