برنامه نویسی | Redis چیست و چرا ما باید از آن استفاده کنیم
Redis چیست و چرا ما باید از آن استفاده کنیم
  • Hamidreza
  • ۱۳۹۸-۰۶-۲۶
  • ۱۵۰

Redis چیست و چرا ما باید از آن استفاده کنیم


رِدیس (به انگلیسی: Redis) ذخیره‌گاه کلید-مقدار داخل حافظه (in-memory) متن‌باز با مانایی (مانایی (به انگلیسی: Durability) در پایگاه‌داده به مجموعه‌ای از ویژگی‌ها گفته می‌شود که قابلیت اعتماد به تراکنش‌ها را تضمین می‌کند، یعنی هنگامی یک تراکنش با موفقیت به اتمام رسید، اثر آن باید در پایگاه‌داده مانا باشد. به عنوان مثال، اگر یک سیستم رزرو پرواز گزارش دهد که یک صندلی با موفقیت رزرو شد، آن‌گاه صندلی حتی در صورت رخ دادن مشکل در سیستم باید رزرو شده بماند. ) انتخابی است. این نرم‌افزار با انسی سی (ANSI C) نوشته شده‌است. بانی گسترش ردیس وی‌ام‌ویر است.

زبان‌های پشتیبانی شده

زبان‌هایی که برای آن‌ها کتابخانه کلاینت ردیس وجود دارد، شامل موارد ذیل است: اکشن‌اسکریپت، سی، سی++، سی شارپ، کلوژر، لیسپ معمولی، دارت، ارلنگ، گو، هسکل، هکس، آی‌او، جاوا، جاوااسکریپت، لوا، آبجکتیو-سی، پرل، پی‌اچ‌پی، پیور داتا، پایتون، آر، روبی، اسکالا، اسمال‌تاک، تی‌سی‌ال.

redis
مدل داده‌ای

از دید بیرون، ردیس نگاشتی از کلیدها به مقدارها است. برای نمونه فرمان زیر یک مقدار رشته‌ای به یک کلید تخصیص می‌دهد

SET mykey "pysoft"

یا فرمانهای زیر یک لیست نو ایجاد می‌کند که دو عضو دارد:

LPUSH mylist "world"
LPUSH mylist "hello"

نوع داده مقدار عملیات ممکن بر روی هر کلید را مشخص می‌کند. ردیس از انواع داده زیر پشتیبانی می‌کند

رشته

  • رشته‌ها می‌توانند هر نوع داده‌ای، مثلاً تصویر باینری، را نگهداری کنند. یک رشته باید حداکثر ۵۱۲ مگابایت طول داشته باشد.

لیست

  •  لیست‌ها لیست‌های از رشته‌ها هستند که به ترتیب درج مرتب شده‌اند. می‌توان به سر یا ته یک لیست یک عنصر جدید افزود.

مجموعه

  • مجموعه‌ها کلکسیون بدون ترتیبی از رشته‌ها هستند. می‌توان به یک مجموعه رشته جدید افزود، حذف کرد، یا وجود یک رشته را در مجموعه امتحان کرد.

درهم‌سازی (به انگلیسی: Hash)

  • درهم‌سازی‌های ردیس نگاشتی بین کلیدهای از نوع رشته به مقادیر از نوع رشته‌است.

مجموعه مرتب

  • مشابه مجموعه‌ها هستند، با این تفاوت که به هر عنصر مجموعه مرتب یک امتیاز تخصیص می‌یابد، و اعضای مجموعه مرتب از بیشترین امتیاز به کمترین امتیاز مرتب می‌شوند.

ماندگاری داده

ردیس چندین گزینه برای ماندگاری ارائه می‌دهد:

  •  ذخیره‌کردن یک نسخه از داده بر روی دیسک در بازه‌های منظم طبق قواعدی که توسط کاربر مشخص شده‌است
  • ثبت در شرح وقایع پس از دریافت هر درخواست نوشتن، که این شرح وقایع را در بازاجرای بعدی سرور می‌توان دوباره اجرا کرد
  • غیرفعال کردن ماندگاری
  • ترکیبی از دو حالت اول

در حالت اول، کاربر می‌تواند قواعدی مانند قاعده زیر تعریف کند

save 60 1000

که به این معنا است که در بازه‌های ۶۰ ثانیه‌ای حالت سیستم بررسی می‌شود، و اگر حداقل ۱۰۰۰ عمل نوشتن انجام شده باشد، یک نسخه از داده بر روی دیسک ذخیره می‌شود. کاربر می‌تواند چندین قاعده این چنین تعریف کند. مثلاً قاعدهٔ دیگری که اگر پس از ۱۰ ثانیه میزان تغییرات بیش از ۲۰۰۰ بود یک نسخه بر روی دیسک ذخیره شود.

در حالت دوم، یعنی ثبت رخدادها در شرح وقایع (log)، چندین گزینه وجود دارد:

  • هماهنگ‌کردن حالت فایل با حالت فیزیکی دیسک به محض عمل نوشتن (امن‌ترین گزینه، ولی کندترین)
  • هماهنگ‌کردن حالت فایل با حالت فیزیکی دیسک در هر یک ثانیه (امکان از دست دادن حداکثر یک ثانیه داده)
  • محول کردن هماهنگ‌کردن حالت فایل با حالت فیزیکی دیسک به سیستم‌عامل (تندترین گزینه، ولی ناامن‌ترین)

نحوه نصب ردیس

نصب ردیس بر روی لینوکس دبیان:

apt-get install redis-server

کامپایل ردیس بر روی لینوکس:

wget http://redis.googlecode.com/files/redis-2.6.10.tar.gz
tar xzf redis-2.6.10.tar.gz
cd redis-2.6.10
make
sudo make install

استفاده کنندگان و کاربران سرشناس

از کاربران سرشناس ردیس می‌توان به موارد زیر اشاره کرد:

  • گاردین
  • گیت‌هاب
  • استک اورفلو
  • کریگزلیست
  • فلیکر
  • بلیزارد انترتینمنت
  • بامپ
  • دیسکاس
  • دیگ

برای کاربرد ردیس (Redis)، کافی است نگاهی به مارکت‌های فروش اپلیکیشن برای گوشی‌های هوشمند داشته باشید تا متوجه شوید این روزها تا چه اندازه اپ‌های موبایل مخاطب دارند. از طرف دیگر کسب‌و‌کارهای زیادی را شاهد هستیم که تجارت خود را به وب‌سایت‌ها منتقل کرده‌اند و از این طریق به موفقیت‌های بیشتری دست‌پیدا کرده‌‌اند.

این امر باعث شده تا برنامه‌هایی که در سمت سرور (Server Side)، اجرا می‌شوند مخاطبین بیشتری پیدا کنند. سازوکار این برنامه‌ها باید به نوعی باشد که بتوانند پاسخگوی حجم بالای درخواست‌هایی سمت سرور باشند. از طرف دیگر این درخواست‌ها باید با سرعت پاسخ داده شوند تا شاهد ترافیک داده‌ها نباشیم.

در این بین همان‌گونه که شما بهتر از ما می‌دانید بهترین راه‌حل در این زمینه استفاده از بانک‌های اطلاعاتی NoSQL است. جالب است بدانید یکی از پرطرفدارترین و کارآمدترین سرورهای پایگاه‌داده را می‌توان Redis نام برد و به احتمال زیاد شما هم از Redis بسیار شنیده‌اید و این پرسش برای شما مطرح شده که ردیس چیست و چه ویژگی‌هایی دارد. به همین منظور قصد داریم با هم نگاهی به Redis داشته باشیم و با ویژگی‌های آن آشنا شویم.

Redis چیست

برای تعریف Redis (ردیس) سری به وب‌سایت رسمی آن با آدرس redis.io زدیم، در این وب‌سایت تعریف شده که این فناوری به عنوان پایگاه داده‌ای در حافظه اصلی (In memory)‌ است که برای نگهداری پایگاه داده، حافظه پنهان (Cache) و واسط پیام (Message Broker) استفاده می‌شود.

در‌واقع می‌توان گفت ردیس داده‌ها را با سیستم Key-value نگهداری می‌کند و به لطف این ویژگی از آنجایی که رابطه پیچیده‌ای میان داده‌ها ایجاد نمی‌شود، دسترسی و بازیابی این اطلاعات بسیار ساده‌تر خواهد شد. ردیس (Redis) به عنوان پایگاه داده و کش مورد استفاده قرار می گیرد.

سیستم های ذخیره سازی Key-Value سیستم هایی هستند که اطلاعات به صورت کلید و مقدار ذخیره می شوند. وقتی می گوییم سیستم in-memory key-value به معنی این است که این سیستم اطلاعات را در RAM نگهداری می کند پس سرعت دسترسی به اطلاعات قاعدتاً چند برابر خواهد شد. در ردیس هر رکورد یک عنوان و یک داده دارد.

این روزها شاهد پشتیبانی Redis از انواع مختلف داده‌ها مانند String, Hash, List, Set و Sorted Set هستیم. از طرف دیگر با توجه به این امر که داده‌ها بوسیله Redis در حافظه اصلی مستقر می‌شوند، این فرآیند سرعت چشمگیری دارد.

این موارد باعث شده تا Redis گزینه خوبی برای Caching, Counting, Queues و Pub and Sub به‌حساب بیاید.

تفاوت عمده بین Redis و دیگر سیستمهای پایگاه ذخیره سازی داده ها این است که Redis نه تنها مقدار رشته را می پذیرد بلکه مقادیر داده ای زیر را نیز پشتیبانی می کند.

کاربرد Caching در Redis چیست

همان‌گونه که حتماً به‌خوبی می‌دانید زمانی از Caching استفاده می‌شود که قصد داشته باشیم دسترسی به هارد دیسک کمتر انجام شود، به عبارت دیگر در Caching اطلاعات در حافظه موقت ذخیره می‌شود که این فرآیند سرعت دسترسی به اطلاعات و بارگذاری آن‌ها را افزایش می‌دهد. به این ترتیب به جای چندین بار مراجعه برای بازخوانی اطلاعات از سرورها، این اطلاعات یک بار دریافت شده و در قالب حافظه نهان که همان Caching است در ردیس قرار می‌گیرد.

redis cashing

از این طریق در کنار صرفه‌جویی در زمان و افزایش سرعت، دسترسی کمتری به منابع نیاز انجام می‌شود که این امر نیز به بهینه‌سازی بیشتر کمک می‌کند.

در این بین به این نکته نیز باید اشاره کرد که در ردیس اطلاعات در حافظه موقتی و Cache ذخیره می‌شوند، این امر باعث می‌شود دسترسی به آن‌ها با سرعت بسیار بیشتری انجام شود اما این سکه روی دیگری نیز دارد و امکان ذخیره‌سازی دائمی اطلاعات را در Redis نخواهید داشت. به این ترتیب برای نمونه اگر قصد دارید اطلاعات مهم یک مجموعه تجاری را به صورت دائم ذخیره‌سازی کنید، Redis در این زمینه کاربردی نخواهد داشت. اما از طرف دیگر روی Redis برای ذخیره کوکی‌ها، Session، اطلاعات مربوط به ورود و خروج کاربران و به اشتراک‌گذاری داده‌ها می‌توانید حساب باز کنید. به‌عبارت ساده‌تر هر داده‌ای که لزومی به ذخیره‌ دائم ندارد را می‌توان با Redis مدیریت کرد.

چرا Redis توصیه می‌شود

در دنیای کامپیوتر سرعت حرف اول را می‌زند و فناوری‌هایی که سرعت بیشتری را در اختیار کاربر و مدیران قرار می‌دهند طرفداران بیشتری دارند. نقطه قوت ردیس نیز سرعت بیش از حد این فناوری است و از آنجایی که با زبان C نوشته شده است، شاهد افزایش سرعت چشمگیری در ردیس هستیم.

از طرف دیگر ساختار Redis به عنوان یک پایگاه داده NoSql شناخته می‌شود که این ویژگی‌ نیز مورد توجه توسعه‌دهندگان قرار گرفته است. تمامی این موارد دست به دست هم داده است تا شرکت‌های بزرگ فناوری روز‌به‌روز بیشتر به سمت استفاده از Redis گرایش پیدا کنند که در این زمینه می‌توان به سایت های بزرگی مانند Github, Weibo, Pinterest, Snapchat, Craigslist, Diggs, StackOverflow و FlickR اشاره کرد. به این ترتیب انتظار می‌رود در آینده نیز شاهد افزایش دامنه استفاده‌کنندگان Redis باشیم.

این فناوری تعامل کمتری با پایگاه‌های داده‌ مستقر در بستر رایانش ابری دارد و در نتیجه هزینه‌های بسیار کمتری را به دنبال خواهد داشت

در کنار تمامی این موارد به کاربرد آسان و ساده ردیس نیز باید اشاره کرد. این امر باعث شده تا توسعه‌دهندگان تمایل بیشتری به استفاده از آن داشته باشند. از طرف دیگر می‌توان گفت Redis از بیشتر زبان‌های برنامه‌نویسی مطرح دنیا پشتیبانی می‌کند.

زبان‌هایی مانند جاوا اسکریپت، جاوا، Go، سی، سی‌پلاس‌پلاس، سی‌شارپ، پایتون، آبجکتیو سی و PHP سازگاری خوبی با Redis دارند و در نتیجه می‌توان گفت Redis به نیاز طیف وسیعی از توسعه‌دهندگان پاسخ می‌دهد.

این موارد باعث شده تا یادگیری و تعامل با ردیس برای توسعه‌دهندگان ساده‌تر شود که این امر نیز محبوبیت و کاربرد بیشتر آن را به دنبال داشته است. خوشبختانه فرآیند نصب Redis بسیار ساده است و به راحتی می‌‌توان با تایپ چند دستور آن را نصب و آماده بهره‌برداری کرد.

ویژگی‌های ردیس به همین‌جا ختم نمی‌شود و متن‌باز بودن این فناوری در کنار ثبات بالای آن باعث شده است تا هر روز شاهد محبوبیت بیشتر Redis و افزایش بیشتر حضور آن در دنیای فناوری‌های نوین باشیم.

سخن‌پایانی

در مجموع باید گفت محبوبیت ردیس بی‌دلیل نیست و از آنجایی که توسعه‌دهندگان به دنبال ابزارهایی برای افزایش سرعت دسترسی به اطلاعات هستند این فناوری پاسخ خوبی به نیاز توسعه‌دهندگان داده است.

خوشبختانه همان‌گونه که اشاره کردیم نصب و راه‌اندازی ردیس بسیار ساده است و مستندات زیادی برای آموزش آن وجود دارد که در این زمینه می‌توانید به آموزش‌های ردیس در وب‌سایت رسمی آن مراجعه کنید. با این حساب پیشنهاد می‌کنیم از آنجایی که ردیس به‌عنوان مشهورترین و قابل‌اعتمادترین پایگاه داده Key ,Value به‌حساب می‌آید حتماً این فناوری جدید را امتحان کنید.

در پایان خواهشمندیم اگر شما هم تجربه خوبی از کار با Redis دارید، در قسمت نظرات ما و سایر کاربران را در جریان تجربه‌های مفید خود قرار دهید.


مقاله های پیشنهادی:

Hamidreza

برنامه نویس جوان علاقمند به هوش مصنوعی، جنگو و پایتون طراح وب سایت و ایده ساز نو با ۲ سال تجربه در عرصه ی تولید محتوا و سئو در بهترین وب سایت های ایران

نظر شما در مورد این پست چیه؟!