آنچه در این مقاله میخوانید
Redis چیست؟
۱۷ تیر ۱۳۹۹
در بسیاری از پروژههای نرمافزاری، سرعت دسترسی به دادهها نقش حیاتی دارد. وقتی صحبت از ساخت اپلیکیشنهایی میشود که نیاز به پاسخگویی آنی، مدیریت حجم بالایی از درخواستها یا اجرای عملیات پیچیده روی دادهها دارند، ابزارهایی فراتر از دیتابیسهای سنتی نیاز است. Redis یکی از محبوبترین گزینهها در این زمینه است؛ یک پایگاه داده درونحافظهای، متنباز و مبتنی بر مدل key-value که نهتنها برای کش کردن دادهها، بلکه برای پیادهسازی صف، شمارنده، پیامرسانی و حتی ساختارهای دادهی پیچیده هم کاربرد دارد.
در ادامه خواهید خواند:
- Redis چیست؟
- استفادههای متداول
- ویژگیهای اساسی
- Redis در مقابل Memcached
- Redis در مقابل MongoDB
- جمع بندی
Redis چیست؟
Redis یک پایگاه داده مبتنی بر حافظه (In-Memory Database) است؛ به این معنا که دادهها بهجای ذخیرهسازی روی دیسک، در حافظه RAM نگهداری میشوند. این ویژگی باعث میشود که سرعت دسترسی به دادهها در Redis نسبت به دیتابیسهای سنتی که روی دیسک عمل میکنند، بهمراتب بالاتر باشد. Redis مخفف REmote DIctionary Server است و بهطور کلی بهعنوان یک دیتابیس Key-Value برای ساختارهای داده مختلف شناخته میشود.
بر خلاف بسیاری از دیتابیسهایی که تنها مقادیر ساده را ذخیره میکنند، Redis توانایی ذخیرهسازی و ویرایش ساختارهای داده سطح بالا مانند لیستها (Lists)، هشها (Hashes یا Mapها)، مجموعهها (Sets) و مجموعههای مرتبشده (Sorted Sets) را دارد؛ ساختارهایی که برای اکثر توسعهدهندگان آشنا و قابل استفاده هستند. این ویژگی مهم، Redis را از سایر پایگاههای داده مبتنی بر کلید-مقدار متمایز میکند.
ویژگیهایی مانند سادگی در استفاده، عملکرد بسیار سریع و پشتیبانی از عملیات atomic در تغییر دادهها، باعث شده Redis بتواند بسیاری از چالشهایی را که در پایگاههای داده رابطهای مانند MySQL وجود دارد، بهسادگی حل کند. برای همین، Redis فقط یک ابزار ساده برای ذخیره دادهها نیست، بلکه میتوان از آن برای پیادهسازی راهحلهای پیچیده با کمترین پیچیدگی و بیشترین کارایی استفاده کرد.

استفادههای متداول
- Caching: به دلیل کارایی بالای Redis در این که حجم و سرعت خواندن و نوشتن در Redis از دیتابیسهای رابطهای بسیار بالاتر و بیشتر است، اکثر توسعه دهندگان سراغ Redis میروند. با توجه به قابلیتهای Redis در اینکه میتوان تمام دادهها را بر روی دیسکها ذخیره کرد (redis persistence)، جایگزین memcached در کشکردن نیز است.
- Publish and Subscribe: بعد از نسخه 2.0، Redis قابلیتی تحت عنوان الگوی پیامرسانی Public/Subscribe معرفی کرد که برای توزیع دادهها استفاده میشود. برخی از سازمانها به دلیل سادگی و کارایی بالای Redis، از سایر سیستمهای توزیع پیام نظیر RabbitMQ و Zeromq به Redis مهاجرت کردند.
- Queues: پروژههایی نظیر Resque از Redis برای ایجاد صف background job استفاده میکنند.
- Counters: دستورات atomic مانند HINCRBY، اجازه پیادهسازی ساده و به صرفه شمارندهها را میدهند. ایجاد یک شمارنده به سادگی تعیین یک نام برای کلید و یا فیلد و اجرای دستور HINCRBY است. هیچ نیازی به خواندن دیتا قبل از افزایش شمارنده و در واقع طرح و اساسی برای بروزرسانی آن نیست. از آنجایی که این نوع دستورات، دستورات atomic هستند، شمارندهها پایداری خود را به هنگامی که توسط چندین سرور تغییر مییابند، حفظ میکنند.
ویژگیهای اساسی
- ساختار دادههای سطح بالا: از ساختار دادههایی نظیر: listها، stringها، setها، hashها و setهای مرتب شده به عنوان مقادیر پشتیبانی میکند.
- کارایی بالا: به دلیل قابلیت در حافظه بودن Redis، باعث میشود تا توسعهدهندگان یک پروژه پیچیدگی را در پایینتر سطح ممکن نگه دارند و بنا به مدل برنامهنویسی براساس eventها، Redis کارایی استثنایی و فوقالعاده خود را در خواندن و نوشتن بر روی دادهها نشان میدهد.
- سبکبودن و عدم نیاز به سایر پکیجها: با ANSI C نوشته شده است و هیچ وابستگی یا dependency خارجی ندارد. به خوبی در محیطهایی POSIX پشتیبانی میشود، اما به طور رسمی در ویندوز پشتیبانی ندارد. در ضمن نسخه آزمایشی توسط مایکروسافت ساخته شده است.
- دسترسی پذیری بسیار بالا: به دلیل ویژگیهایی نظیر asynchronous و non-blocking و قابلیت master/slave replication، میتوان دسترسی پذیری و یا در دسترسبودن بسیار بالای دادهها را تضمین کرد. در حال حاضر راه حلی تحت عنوان Redis Sentinel وجود دارد که میتوان از آن استفاده کرد، اما هنوز درحال توسعه و پیشرفت است.
Redis در لیارا، راهکاری سریع و مقیاسپذیر برای توسعهدهندگانی است که به سرعت و کارایی بالا نیاز دارند.
✅ عملکرد بالا و پاسخدهی سریع✅ ذخیرهسازی در حافظه برای دسترسی سریع به دادهها✅ پشتیبانی از انواع دادهها
خرید و راهاندازی سریع هاست Redis
نمونههایی از شرکتهای بزرگ که از Redis استفاده میکنند.
- Twitter: یک کلاستر از Redis را به جهت ذخیره سازی جدول زمانی کاربران ایجاد کردهاند. با استفاده از ساختار داده list، توییتر ۸۰۰ توییت جدید برای یک کاربر خاص را ذخیره میکند.
- Pinterest: نمودارهای مربوط به دنبالکنندگان یک کاربر را در کلاستری از Redis، به نحوی که این دادهها میان نمونههای مختلفی به اشتراک گذاشته شده است، ذخیره میکند.
- Github: یکی از اولین حامیان Redis است. Github پروژه متنباز Resque را به جهت بهبود اجرای jobهایی که در صف پسزمینه قرار داشتند، توسعه داده است. توسعهدهندگان Github به این که Redis خیلی از مشکلها و دشواریهای صف و یا queue را حل میکند و همچنین مزایای آن پی بردهاند، به عبارتی توسعهدهندگان در صورت عدم استفاده از Redis همچنان باید زمان زیادی را بر روی مشکلها و دشواریهای برنامهریزی workerها صرف میکردند.
Redis در مقابل Memcached
هر دو پروژه متنباز هستند و در عین حال دیتا را در حافظه اصلی ذخیره میکنند. اما تفاوت این دو جایی معلوم میشود که به سراغ ویژگیها و قابلیتهای آنها میرویم. Memcached اغلب برای پروژههای ساده که حافظه Ram کمی مصرف میکنند عالی است، اما در همین حین در مواجه با دادههای مرتب شده و یا serialize شده نامناسب است. به دلیل پشتیبانی Redis از اکثر ساختار دادههای مختلف، قدرت و کارایی بیشتری در برخورد با مجموعه دادههای بسیار زیاد دارد. همچنین توانایی بیشتری در بهبود cache و راندمان در برنامههای مخصوص دارد.
چگونه هشها را در Redis مدیریت کنیم؟
مدیریت هشها در Redis
Redis در مقابل MongoDB
تفاوت این دو در این است که یکی به صورت دیتابیسی در حافظه، دیگری دیتابیسی بر روی دیسک است و هر کدام برای هدف خاصی طراحی شدهاند اما اغلب در کنار هم با هدف افزایش سرعت پردازش و کارایی دیتابیسهای NoSQL استفاده میشوند. به دلیل قابلیت cache که در Redis وجود دارد، خیلی سریعتر میتوان به دادهها دسترسی پیدا کرد. در نتیجه میتوانیم از این قابلیت بهره ببریم و Redis را به عنوان رابطی برای MongoDB استفاده کنیم تا بتوانیم سریعتر و موثرتر دادههای بیشتر و بزرگتری را real-time تر بروزرسانی و ویرایش کنیم. به دلیل این که MongoDB میتواند حجم قابل توجهی از دادهها را ذخیره کند و از طرف دیگر با توجه به سرعت بسیار بالای Redis در پردازش آنها، استفاده از این دو درکنار یکدیگر میتواند راه حلی برای مسائل مختلفی که در آنها سرعت و کارایی حرف اول را میزند، باشد.
ترکیب ساختار دادههای سطح بالا، عملکرد وصف نشدنی و بسیار عالی Redis و سایر مسایلی که مطرح کردیم باعث میشود که Redis نقش آچار فرانسه در ذخیرهسازی دادهها را برای توسعهدهندگان داشته باشد.
Redis برای حل چالشهایی که به هنگام ساخت سیستمهای بلادرنگ یا real-time، به دلیل برخورداری از عملیاتی که برای دیتاها در دیتابیس نیاز است، مناسب است.
Redis بیشتر کارایی و تمرکز خود را بر روی این میگذارد که دادهها در حافظه هستند. در عین حال دادههای Redis قابلیت ذخیرهسازی بر روی دیسک را نیز دارند، اما به این نکته توجه کنید که اگر تنظیمات Redis به صورت اشتباه انجام شود، موجب از دست دادن بخش بزرگی از دادهها، به هنگام خاموش کردن و یا پایین آمدن ناگهانی Redis میشود.
معرفی هاست Redis ارزان
هاست Redis
جمع بندی
در نتیجه، Redis یک ابزار قدرتمند و انعطافپذیر است که میتواند نقش مهمی در بهبود کارایی و سرعت سیستمهای نرمافزاری ایفا کند. با ذخیره دادهها در حافظه و پشتیبانی از ساختارهای داده پیچیده، Redis بهویژه برای برنامههای نیازمند دسترسی سریع و مقیاسپذیری بالا گزینهای ایدهآل است.
ویژگیهایی مانند atomicity، سادگی در استفاده و توانایی ذخیرهسازی دادهها به صورت موقت یا دائمی، آن را از دیگر پایگاههای داده مشابه متمایز میکند. در کنار مزایای فراوان، Redis همچنان برای حل چالشهای پیچیدهای که در پایگاههای داده رابطهای بهدلیل محدودیتهای عملکردی وجود دارند، ابزار قابل اعتمادی باقی میماند. این ویژگیها باعث شده که Redis به یکی از انتخابهای محبوب برای توسعهدهندگان در شرکتهای بزرگ و پروژههای مقیاسپذیر تبدیل شود.
منبع: https://www.credera.com/blog/technology-insights/java/redis-explained-5-minutes-less