Redis یک سیستم ذخیره سازی ساختار داده متن باز است که به عنوان پایگاه داده، حافظه پنهان و یک واسطه پیام استفاده میشود. این سیستم از انواع ساختارهای داده مانند هشها، رشتهها، لیستها، مجموعهها، بیت مپها، هایپرلاگها، مجموعههای مرتب شده با کوئریها، شاخصهای جغرافیایی مکانی و همچنین استریمها پشتیبانی میکند. به علاوه دارای تخلیه LRU، اسکریپت نویسی Lua، تکثیر داخلی، تراکنشها و همچنین مراحل مختلف ماندگاری بر روی دیسک است که امکان دسترسی بالایی از طریق Redis Sentinel و پارتیشن بندی اتوماتیک با کمک Redis Cluster را فراهم میکند.
فردی که میداند چگونه از Redis استفاده کند، میتواند تعدادی عملیات مانند افزایش مقدار، الحاق به رشته، محاسبه تقاطع مجموعه، اتحاد و اختلاف، افزودن یک عنصر به لیست یا جمع آوری عضو با بیشترین رتبه بندی در یک مجموعه مرتب شده در یک هش را اجرا کند.
برای دستیابی به عملکردی برجسته، Redis با یک مجموعه داده داخلی در حافظه کار میکند.
بر اساس موارد استفاده میتوان با ریختن یک مجموعه داده هر چند وقت یکبار روی دیسک یا با ضمیمه کردن هر یک از دستورات به یک ورودی، همان حالت را ادامه داد. در صورت نیاز به حافظه پنهان شبکهای سرشار از ویژگی، پایداری به راحتی غیرفعال میشود.
Redis حتی از تکثیر ناهمگن master-slave، در کنار همگام سازی بسیار سریع و غیر مسدودکننده، اتصال مجدد به صورت خودکار با یکپارچه سازی مجدد جزئی در شبکه نیز پشتیبانی میکند.
ویژگیهای Redis
Redis به زبان ANSI C نوشته شده است و در اکثر سیستمهای POSIX مانندBSD ،Linux و OS X بدون هیچ گونه وابستگی خارجی کار میکند. OS X و Linux دو سیستمعاملی در نظر گرفته شدهاند که Redis بیشترین پیشرفت را در آنها داشته و آزمایش شده است، هرچند که از لینوکس برای استقرار سیستم مشابه نیز استفاده میشود. Redis ممکن است در سیستمهای مشتق شده از Solaris مانند SmartOS هم کار کند، اما پشتیبانی اهمیت دارد. متأسفانه هیچ پشتیبانی رسمی برای ویندوز ارائه نشده، اما مایکروسافت پورت Win-64 را برای Redis توسعه و نگهداری کرده است. در سال 2019، Redis دهمین سالگرد خود را جشن گرفت و سایر ویژگیهای قابل توجه آن به شرح زیر است:
1. سطح بالای ساختارهای داده : Redis پنج گزینه داده احتمالی را برای مقادیر ارائه میدهد که شامل هشها، لیستها، مجموعهها، رشتهها و مجموعههای مرتب شده است. عملیاتی که منحصر به این نوع دادهها است، ارائه میشود و همراه با پیچیدگی زمانی کاملا مستند (نماد Big O) میباشد.
2. عملکرد کارآمد : به دلیل ماهیت درون حافظه بودن و تعهد دادن یک مدیر پروژه برای اطمینان از حداقل پیچیدگی و همچنین مدل برنامه نویسی مبتنی بر رویداد، این برنامه دارای یک عملکرد استثنایی برای خواندن و نوشتن عملیات است.
3. بسیار سبک وزن و بدون وابستگی : Redis به زبان ANSI C نوشته شده است و به هیچ وابستگی خارجی محدود نمیشود. این برنامه در تمام محیطهای POSIX به خوبی کار میکند. سیستمعامل ویندوز به طور رسمی برای Redis پشتیبانی نمیشود، اما یک نسخه آزمایشی توسط مایکروسافت برای آن در نظر گرفته شده است.
4. در دسترس بودن بالا : Redis برای اطمینان از در دسترس بودن دادههای سطح بالا، از پشتیبانی داخلی برای تکرار غیر مسدود کننده، ناهمگامی و پاسخگویی master/slave پشتیبانی میکند. در حال حاضر یک راه حل با قابلیت دسترسی بالا به نام Redis Sentinel وجود دارد که در حال حاضر قابل استفاده است، اما هنوز هم به عنوان یک پروژه در حال انجام در نظر گرفته شده است.
برای کسب مهارتهای بیشتر در Redis، این دوره را امتحان کنید. همراه با سه ساعت فیلم آموزشی که موضوعهای اصلی را پوشش میدهد و شامل پیکربندی، اصول اولیه سیستم، انواع دادهها، کلاینتهای PHP، دستورات، بکاپ گرفتن از دیتابیس، تراکنشها، اقدامات امنیتی و موارد دیگر است.
چرا باید از Redis استفاده کرد؟
اکنون که به استفاده از Redis رسیدهایم، میتوان سوال کرد که چرا باید از Redis استفاده کرد یا اینکه با استفاده از Redis در مقایسه با دیگر نمونههای آن چه چیزی به دست میآوریم؟ خوب، شکی نیست که Redis یک کلاس جدا از سایر رقبا است. اما آنچه آن را منحصر به فرد میکند خلاقیت و کارایی آن است. در زیر برخی از مهمترین دلایلی که باید حداقل یک بار Redis را امتحان کنید ذکر شده است.
1. سرعت فوق العاده بالا : Redis فوق العاده سریع است و این امر به دلیل نگارش آن به زبان C میباشد.
برای کسب اطلاعات بیشتر در مورد زبان برنامه نویسی C، این مقاله را مطالعه کنید.
2. پایگاه داده NoSQL : Redis یک پایگاه داده NoSQL است.
3. محبوبیت : در حال حاضر ردیس توسط تعدادی از غولهای فناوری مانند Pinterest ، Snapchat، GitHub،Weibo ،Digg ،StackOverflow ، Craigslist و Flickr مورد استفاده قرار میگیرد.
4- برای Caching مفید است : به منظور محافظت از فراخوانیهای پایگاه داده ابری و در نتیجه صرفه جویی در هزینههای اضافی، میتوان از طریق Redis گزینه caching را انتخاب کرد.
5. تعامل بالا با توسعه دهنده : Redis توسعه دهنده پسند است. در حال حاضر توسط اکثر زبانها پشتیبانی میشود که این یک مزیت بزرگ استفاده از این فناوری متن باز است. زبانهایی مانند C ،C ++ ،C# ،JavaScript ،Java ،Go ،Objective-C ،Python ، PHP و تقریبا همه زبانهای مشهور موجود از Redis پشتیبانی میکنند.
کاربردهای Redis
سادگی، عملکرد فوق العاده سریع و همچنین دستکاری اتمی در ساختار دادهها آن را برای حل مشکلاتی که در صورت پیاده سازی همراه با پایگاههای داده سنتی رابطهای، دشوارند یا عملکرد ضعیفی دارند، پیشنهاد میدهد. برخی از کاربردهای محبوب ردیس به دلیل ماهیت متنوع آن به شرح زیر است:
1. صفها : پروژههایی مانند Rescue از Redis در بک-اند برای کارهای صف پیش زمینه استفاده میکنند.
2. انتشار و اشتراک : از زمان راه اندازی نسخه 2.0، Redis قابلیت توزیع دادهها را با استفاده از الگوی انتشار / اشتراک ارائه میدهد. برخی از سازمانها فقط به دلیل عملکرد قابل اعتماد Redis و سادگی آن تغییر مسیر دادهاند و از سیستمهای دیگر کار با صف (مانند RabbitMQ ، zerm و ...) دور شدهاند.
3. حافظه پنهان : به دلیل عملکرد بالا، تعدادی از توسعه دهندگان در زمانی که حجم عملیات خواندن و نوشتن بیش از توانایی پایگاههای داده سنتی است، به Redis مراجعه کرده اند. با توجه به توانایی آن برای ماندگاری دادهها بر روی دیسک در مقایسه با راه حلهای سنتی برای ذخیره سازی، Redis به عنوان یک گزینه برتر در نظر گرفته میشود.
4. شمارندهها : دستورات اتمی مانند HINCRBY امکان اجرای ساده و بدون نخ شمارندههای مختلف را فراهم میکند. تشکیل یک شمارنده به راحتی تعیین نام برای یک کلید و سپس صدور دستور HINCRBY است. حتی خواندن دادهها قبل از افزایش آنها هیچ فایدهای نداشته و حتی هیچ طرح دادهای برای به روزرسانی وجود ندارد. از آنجا که این عملیات به صورت اتمی انجام میگیرند، شمارندهها در صورت دستیابی به سرورهای برنامههای متعدد به حفظ ثبات کمک میکنند.
سازمانهای مشهوری که از REDIS استفاده میکنند
Redis نیازهای کاربران متعدد خود را جلب و تأمین کرده است. برخی از ویژگیهای مهمی که Redis را از سایر پایگاههای داده با ارزش کلیدی جدا میکند این است که ردیس توانایی ذخیره و همچنین دستکاری انواع دادههای سطح بالا را دارد. این نوع دادهها شامل ساختارهای اساسی مانند نقشهها، لیستها و همچنین مجموعههای مختلف هستند. اینها برخی از انواع دادههایی اند که بیشتر توسعه دهندگان با آنها آشنا هستند. به دلیل چنین سهولت استفادهای، Redis جای خود را در سیستمعاملهای سازمانهای محبوب پیدا کرده است. جزئیات نحوه استفاده از Redis در یک سازمان خاص در زیر ذکر شده است.
1. GitHub : گیت هاب یک سرویس میزبانی تحت وب برای اهداف پروژههای توسعه نرمافزار است که از سیستم کنترل Git استفاده میکند. این برنامه مخازن خصوصی و همچنین حسابهای رایگان برای پروژههای متن باز، سرویسهایی را ارائه میدهد. در حال حاضر گیت هاب مشهورترین سایت مخزن کد برای پروژههای متن باز در نظر گرفته شده است. گیت هاب اوایل پروژه Redis محسوب میشد. این سیستم به منظور سهولت در اجرای فرایندهای پس زمینهای که در یک صف قرار گرفتهاند، کتابخانهای به نام Rescue را ایجاد کرد. توسعه دهندگان گیت هاب از این واقعیت استفاده کردند که ردیس توانست بسیاری از مشکلات دشوار موجود در صف را حل کند. بنابراین توسعه دهندگان میتوانستند بر روی وظایف دشوار زمان بندی کارگران متمرکز شوند.
2. Pinterest : پینترست یک وب سایت تصویری محبوب است که دارای تصاویر مبتنی بر مضامین مختلف میباشد و کاربران مجاز به مشاهده، اشتراک گذاری و همچنین بارگیری تصاویر با کیفیت بالا هستند. پینترست نمودارهای دنبال کننده کاربر را در یک خوشه Redis ذخیره میکند، جایی که دادهها با صدها نمونه مختلف به اشتراک گذاشته میشوند. پینترست شروع به استفاده از Redis کرد؛ زیرا متوجه شد که روش قبلی مثل MySQL و Memcached به حد اشباع رسیده است.
3. Twitter : تویتر یک سایت شبکه اجتماعی محبوب است که به کاربران امکان میدهد دیدگاهها و نظرات خود را به اشتراک بگذارند. توییتر به منظور ذخیره جدول زمانی همه کاربران وب سایت، یک خوشه بزرگ Redis را مستقر کرده است. با استفاده از لیستی از ساختار دادهها، توییتر قادر است 800 مورد از جدیدترین توییتهای ورودی جدید کاربر را ذخیره کند.
محدودیتهای Redis
جدا از مزایا و کاربردهایی که Redis ارائه داده است، مانند هر سیستم دیگری Redis نیز دارای اشکالاتی هست. بیایید نگاهی به برخی از چالشهای اساسی که ممکن است در هنگام استفاده از Redis با آنها روبه رو شوید، داشته باشیم.
1. سطح امنیت: Redis فقط امنیت پایه (مانند حق دسترسی) را ارائه میدهد. اما RDBMS لیستهای کنترل دسترسی دقیق هر شی را فراهم میکند (همچنین به عنوان مدیریت نقش شناخته میشود).
2. سرور ساختار داده : در Redis هیچ زبان کوئری وجود ندارد و فقط دستورات هستند. همچنین هیچ پشتیبانی از جبر رابطهای وجود ندارد و نمیتوان کوئریهای موقت ارائه داد. تمام دسترسیهای داده باید توسط یک توسعه دهنده پیش بینی شود و مسیرهای دسترسی مناسب به دادهها طراحی شود. به همین دلیل اعتقاد بر این است که انعطاف پذیری از بین میرود.
3. ذخیره سازی در حافظه داخلی: همه دادهها باید در حافظه قرار بگیرند. RDBMS عموما اطلاعات موجود در دیسکها و حافظه پنهان دادهها را در خود ذخیره میکند. با استفاده از RDBMS میتوان دادههای بیشتری را نسبت به حافظه موجود مدیریت کرد. اما این کار با Redis امکان پذیر نیست.
4- فقط 2 گزینه برای ماندگاری دارد : عکس برداری منظم و فایلهای ضمیمه. هیچ یک از این موارد به اندازه سرور معاملاتی واقعی که از قبل وارد سیستم میشود و ویژگیهایی نظیر از بین بردن / خنثا کردن سیستم، بازیابی در زمان، جمع کردن بلوک و قابلیت بازگشت را دارد، ایمن نیست.
5. به پشتیبانی کلاینت احتیاج دارد : برای حمایت از خوشههای Redis لازم است کلاینت تغییرات را انجام دهد. خوشههای Redis مدتهاست که وجود دارند، اما هنوز کلاینتهای خاصی هستند که از آن پشتیبانی نمیکنند.
6. فقط از یک پایگاه داده پشتیبانی میکند : برخلاف پایگاههای داده مستقل، خوشههایRedis فقط از یک پایگاه داده پشتیبانی میکنند. همچنین دستور SELECT در Redis مجاز نیست.
7. نمونه قابل مقیاس نیست : یک نمونه منحصر به فرد Redis مقیاسپذیر نمیباشد. این تنها در یک هسته پردازنده در حالت تک رشته کار میکند. برای به دست آوردن مقیاس پذیری، تعدادی از موارد Redis باید مستقر شده و شروع شوند. توزیع و اشتراک در سمت کلاینت انجام میشود (توسعه دهندهای باید از اینها مراقبت کند). اگر کسی آنها را با یک نمونه منحصر به فرد Redis مقایسه کند، RDBMS مقیاس پذیری بیشتری ارائه میدهد. موازی کاری را در سطح اتصال فراهم میکند. گفته میشود که آنها چند پردازشی هستند (مانندOracle و PostgreSQL) و یا حتی چند رشتهای (مانندMySQL و Microsoft SQL Server) که مزایای ماشینهای چندهستهای را به همراه دارد.
جمع بندی
اوج ساختارهای دادهای سطح بالا و عملکرد بالا همراه با یک دید کلی، به ردیس اجازه میدهد جایگاهی را در میان سیستمهای مشابه به دست آورد. Redis به دلیل قابل پیش بینی بودن عملیاتی که روی دادههای ذخیره شده در پایگاه داده اعمال میکند، به منظور حل چالشهایی که در زمان توسعه سیستمهای بی درنگ (real-time) وجود دارد، بسیار مناسب میباشد.
علاوه بر این بیشترین عملکرد خود را به این واقعیت نسبت میدهد که بیشتر دادهها همیشه در حافظه قرار دارند. دادهها را میتوان در یک دیسک ادامه داد، اما با خاموش شدن ناموقع سیستم، ممکن است پیکربندی نادرست منجر به از دست رفتن دادهها شود. بنابراین با رعایت احتیاط، ردیس قطعا یک ابزار مهم برای توسعه دهندگان است.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید