Redis یک ذخیرهساز داده متنباز و درونحافظهای (in-memory) است که میتواند بهعنوان پایگاه داده، کش یا واسط انتقال پیام استفاده شود. این فناوری با نگهداری داده در حافظه (memory)، سرعت خواندن و نوشتن را افزایش میدهد و در کاهش بار پردازشی سرور و بهبود عملکرد برنامهها نقش مهمی ایفا میکند. پایگاه داده Redis از تراکنشها، عملیاتهای اتمیک (تمام عملیاتها با هم انجام شوند یا هیچکدام انجام نشوند) و سازوکار انتشار/اشتراک نیز پشتیبانی مینماید اما همه قابلیتهای پایگاههای داده سنتی مانند MySQL یا MongoDB را ارائه نمیدهد. بنابراین، انتخاب آن باید بر اساس نیازهای پروژه انجام شود.
پایگاه داده درونحافظهای (In-memory)
پایگاه داده درونحافظهای یا In-memory، دادهها را بهجای دیسک در حافظه اصلی ذخیره میکند و از سرعت بالاتر RAM برای کاهش زمان دسترسی استفاده مینماید. این فناوری در تحلیل آنی، بازیهای آنلاین، تجارت الکترونیک و شبکههای اجتماعی کاربرد دارد و برای برنامههای مقیاسپذیر نیز مناسب است. با این حال نگهداری داده در حافظه، خطر از دست رفتن داده هنگام خرابی یا خاموشی را افزایش میدهد. پایگاه داده Redis برای کاهش این خطر از قابلیتهایی مانند پایداری (persistence) و تکثیر (replication) استفاده میکند و امکان ذخیره داده روی دیسک و تکثیر آن میان سرورها را فراهم مینماید.

تصویر(1)
پایداری Redis
پایداری Redis امکان ذخیره داده روی دیسک و بازیابی آن پس از خرابی یا راهاندازی مجدد را فراهم میکند. در روش Snapshotting، کل مجموعه داده طی بازههای مشخص روی دیسک ذخیره خواهد شد که سریع و کمهزینه می باشد اما دادههای ایجاد شده پس از آخرین اسنپشات، ممکن است حذف گردند. در روش AOF، عملیاتهای نوشتن درون فایل لاگ ثبت میشوند و پایگاه داده Redis میتواند با اجرای مجدد آنها دادهها را بازسازی کند. AOF پایداری بیشتری فراهم مینماید اما ممکن است منابع بیشتری مصرف کرده و کندتر اجرا شود. بنابراین، روش مناسب باید بر اساس میزان تحمل پروژه نسبت به از دست رفتن داده و محدودیت منابع انتخاب گردد.
پایگاه داده Redis چه کاربردی دارد؟
پایگاه داده Redis برای کش کردن صفحات وب، کاهش بار پردازشی سرورها و افزایش سرعت پاسخگویی استفاده میشود و میتواند ارتباط میان بخشهای مختلف برنامه را نیز از طریق انتقال پیام تسهیل کند. در تحلیل آنی، Redis برای ذخیره و پردازش سریع دادهها به کار میرود و تصمیمگیری مبتنی بر داده را تسریع میکند. در بازیهای آنلاین، وضعیت بازی، پروفایل بازیکنان، امتیازها و جداول رتبهبندی درون Redis نگهداری میشوند و تجربهای سریعتر ایجاد میشود. در تجارت الکترونیک، کاتالوگ محصولات، پروفایل کاربران و سبد خرید مدیریت میشوند و در شبکههای اجتماعی نیز پروفایلها، فهرست دوستان و فیدهای خبری با سرعت بالا لود خواهند شد.

تصویر(2)
جفتهای کلید-مقدار (Key-Value)
جفت کلید-مقدار سادهترین ساختار داده در پایگاه داده Redis را شکل میدهد و از کلیدی منحصربهفرد جهت شناسایی داده و یک مقدار برای نگهداری آن تشکیل میشود. Redis علاوه بر رشتهها، از هشها، فهرستها، مجموعهها و مجموعههای مرتبشده نیز پشتیبانی میکند و ذخیره انواع مختلف داده را امکانپذیر مینماید. مجموعهای از دستورات مانند SET، GET و DEL جهت رشتهها و HSET، HGET و HDEL برای هشها در اختیار توسعهدهندگان قرار میگیرد و مدیریت سریع دادهها را ممکن میکند. این ساختارها استفاده از پایگاه داده Redis را برای ذخیره و بازیابی سریع دادههای متنوع ساده میکنند.
ساختارهای داده غنی
پایگاه داده Redis ساختارهای داده متنوعی ارائه میکند که هرکدام برای نوع مشخصی از داده و عملیات طراحی شدهاند. نوع String دنبالهای از بایتها را نگهداری مینماید و برای دادههای متنی یا باینری به کار میرود، درحالیکه Hash نگاشتی از فیلد و مقدار را ارائه میکند و برای دادههای ساختاریافته مناسب است. فهرستها نیز امکان نگهداری دادههای ترتیبی و اجرای عملیات مرتبط را فراهم میکنند. دستورهایی مانند GET، SET، HGET، HSET، LPUSH، LPOP و LRANGE عملیات ذخیره، بازیابی و مدیریت این دادهها را ساده میکنند. این ساختارهای غنی، بخش مهمی از کارایی Redis را تشکیل میدهند و انعطافپذیری آن را افزایش خواهند داد.
برنامههای چت و پیامرسانی
پایگاه داده Redis میتواند اطلاعات مکالمات، کاربران و پیامها را برای برنامههای چت و پیامرسانی ذخیره و مدیریت کند. اطلاعاتی مانند شرکتکنندگان، آخرین پیامها، مشخصات پروفایل و فهرست مخاطبان در آن نگهداری میشوند و پیامها نیز میتوانند همراه با جزئیاتی مانند فرستنده، گیرنده و زمان ارسال، ذخیره گردند. Redis علاوه بر ذخیرهسازی، تحویل پیام به گیرندگان، ارسال پیام برای چند گیرنده و نگهداری پیام کاربران آفلاین را نیز پشتیبانی مینماید. سرعت بالای پردازش و قابلیت مقیاسپذیری، استفاده از Redis را برای ساخت سامانههای پیامرسان سریع و قابلاعتماد مناسب میکند.

تصویر(3)
ذخیرهسازی سشن (Session Store)
Session Store اطلاعات سشن کاربران را در طول استفاده از یک برنامه وب ذخیره میکند و Redis میتواند این نقش را با سرعت بالا بر عهده بگیرد. اطلاعات سشن در قالب جفتهای کلید-مقدار ذخیره میشود. "کلید"، شناسه منحصربهفرد سشن و "مقدار" اطلاعاتی مانند وضعیت ورود، تنظیمات کاربر و محتویات سبد خرید را نگهداری میکند. استفاده از پایگاه داده Redis در این بخش، سرعت ذخیره و بازیابی سشنها را افزایش میدهد و امکان اشتراکگذاری اطلاعات سشن میان چندین سرور را فراهم مینماید. به همین دلیل، Redis در سامانههای دارای توازن بار (load-balanced) و معماری توزیعشده کاربرد مناسبی خواهد داشت.
مزایای Redis چیست؟
مهمترین مزیت پایگاه داده Redis، سرعت بالای خواندن و نوشتن داده است و این فناوری میتواند حجم بسیار زیادی از عملیات ها را در هر ثانیه پردازش کند. پشتیبانی از تراکنشها امکان اجرای اتمیک چند عملیات را فراهم مینماید و Pub/Sub (مخفف Publish/Subscribe) نیز انتشار و دریافت سریع پیام میان برنامهها را ممکن میکند.
همچنین Redis از مقیاسپذیری و استقرار روی چندین ماشین پشتیبانی مینماید و در سامانههای توزیعشده به افزایش دسترسپذیری کمک میکند. این قابلیت برای برنامههایی مانند بازیهای آنلاین و سامانههای چندسروری اهمیت دارد زیرا دادهها را با سرعت بالا برای آنها در دسترس قرار میدهد. وجود امکاناتی مانند Pub/Sub، تراکنشها و اسکریپت نویسی Lua نیز ساخت برنامههای پیچیده را سادهتر میکند.
اسکریپت نویسی Lua چیست؟
اسکریپت نویسی Lua امکان نوشتن و اجرای اسکریپتهای زبان Lua را درون یک برنامه میزبان فراهم میکند. پایگاه داده Redis از موتور داخلی Lua پشتیبانی مینماید و اجرای مستقیم اسکریپتها روی سرور را ممکن میسازد. این قابلیت به توسعهدهندگان اجازه میدهد عملیاتهای پیچیدهای را روی دادههای Redis تعریف کنند و چندین مرحله را بهصورت اتمیک اجرا نمایند. اجرای اتمیک از تداخل با عملیاتهای دیگر جلوگیری کرده و به حفظ سازگاری و یکپارچگی دادهها کمک میکند. بنابراین، Lua در Redis ابزاری انعطافپذیر برای پیادهسازی عملیاتهای پیچیده و سفارشی محسوب میشود.

تصویر(4)
معایب استفاده از پایگاه داده Redis چیست؟
مهمترین محدودیت Redis به ماهیت in-memory آن مربوط میشود زیرا خرابی یا خاموشی میتواند خطر از دست رفتن داده را افزایش دهد. قابلیتهای Persistence و Replication این خطر را کاهش میدهند اما استفاده از آنها پیچیدگی و مصرف منابع را افزایش خواهد داد. همچنین پایگاه داده Redis در مدل سنتی خود پردازش دستورات را بهصورت تکرشتهای (single-threaded) انجام میدهد و این ویژگی میتواند در اپلیکیشنهای نیازمند پردازش موازی محدودیت ایجاد کند. قابلیتهایی مانند Clustering (خوشهبندی) و Sharding (تقسیم کردن) امکان توزیع داده میان چند سرور را فراهم میکنند اما راهاندازی و مدیریت آنها پیچیدگی بیشتری ایجاد میکند. بنابراین، پیش از انتخاب پایگاه داده Redis باید نیازهای عملکردی، پایداری، منابع و معماری پروژه ارزیابی شود.
جمعبندی
پایگاه داده Redis گزینهای قدرتمند برای کش کردن دادهها، کاهش بار پردازشی سرور و ساخت سامانههای توزیعشده سریع محسوب میشود. سرعت بالا، مقیاسپذیری، Pub/Sub، تراکنشها و اسکریپت نویسی Lua از مهمترین قابلیتهای آن هستند. در مقابل، مصرف بالای حافظه، خطر از دست رفتن داده بدون پیکربندی مناسب پایداری و عدم سازگاری کامل با تمام ویژگیهای ACID (اتمی بودن، سازگاری، ایزوله سازی، پایداری تراکنشها) از محدودیتهای آن هستند. بنابراین، انتخاب Redis باید بر اساس نیازهای واقعی پروژه انجام شود.