امروز که کمی نسبت به روزهای قبل سرم خلوت بود گفتم براتون یک مقاله جامع دیگه بنویسم خداروشکر مقالات قبلی بازخورد خوبی داشت و منو ترغیب کرد که مقالات بیشتری براتون بنویسم امیدوارم بتونم با مقالاتی که می نویسم هرچند کوچک به دوستان کمک کنم تا درک بهتری نسب به مسائل پیدا کنند.
توی این مقاله قرار بریم سراغ Redis دوست داشتنی. Redis از اون برنامه هاست که تغریبا همه کار میکنه از دیتابیس بگیر تا یک سیستم message broker سریع و راحت البته Redis تونسته توی همه زمینه هایی که توش قدم گذاشته تغریبا جزو برترین ها باشه.
Redis در سایت خودش اینطوری توضیح میده:
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.
در واقع اگه بخوایم یکم سادش کنیم Redis یک برنامه هست که داده هارو میتونه توی رم نگهداری کنه که همونطور که قبلا گفتم میتونه به عنوان دیتابیس یا سیستم کش و یا سیستم message broker ازش استفاده کرد.
این برنامه دوست داشتنی تغریبا میتونه با تمام زبان های برنامه نویسی به خوبی کار کنه و بهترین های خودشو به نمایش بزاره - Redis توی هر زبان برنامه نویسی معمولا یک پکیج معروف داره که تمام قابلیت های Redis به در اختیارمون میذاره مثلا توی زبان php کتابخونه phpredis یا در زبان پایتون کتابخانه redis-py نمونه ای از این پکیج ها هستن.
همون طور که قبلا گفتیم Redis اطلاعات درون رم ذخیره میکنه اما تاحالا به این فکر کردید که اگه برق بره چی میشه ؟ یا اگه سرور دچار مشکل بشه و خاموش بشه چی میشه ؟ چون همون طور که احتمالا می دونید اطلاعات درون رم موقته و با خاموش شدن سیستم اطلاعات پاک میشن. خداروشکر Redis به این موضوع فکر کرده و کار مارو به شدت آسون کرده توی قسمت Redis persistence درمورد این موضوع کامل براتون توضیح میدم که Redis برای این مشکل چه راحلی پیشنهاد میده.
خیلی سریع به این موضوع اشاره کنم که Redis فقط اطلاعات شما رو روی رم نگهداری نمیکنه !!! بله درست شنیدید اطلاعات شما فقط روی رم نیست بلکه Redis به ۲ روش که این روش توسط شما قابل انتخاب شدنه - از اطلاعات شما یک بکاپ میگیره و روی هارد شما ذخیره میکنه.
روش اول RDB
روش RDB - روش پیشفرضی هست که Redis از اطلاعات شما بکاپ میگیره و نیازی نیست که شما کار خواستی انجام بدید. در این روش Redis هر چند ثانیه یکبار (این ثانیه قابل تنظیمه) از اطلاعاتی که درون رم شماست بکاپ میگیره و درون هارد ذخیره میکنه. معمولا اگه اطلاعات ذخیره شدن از درجیه اهمیت بالایی برای شما برخوردار نباشه این روش خوبیه اما اگه اطلاعات که دارید ذخیره میکنید براتون مهمه این روش پیشنهاد نمیشه خب میگید چرا؟
فرض کنید که دارید اطلاعات یکسری یوزر ذخیره میکنیم و Redis ما تنظیم شده که هر ۱۰ ثانیه بکاپ بگیره. ما ظرف ۴ ثانیه اطلاعات ۱۰۰۰۰ یوزر وارد کردیم اما بعد از ثانیه ششم سرور خاموش میشه !!! توی این سناریو خیلی راحت اطلاعات کل یوزر هارو از دست میدیم. برای اینکه بتونیم اینجور مسائل کنترل کنیم باید از روش AOF استفاده کنیم.
روش دوم AOF
روش AOF وقتی استفاده میشه که میخواید شانس از دست دادن اطلاعات به صفر برسونید. توی این حالت هر ثانیه از اطلاعات شما بکاپ گرفته میشه و درون یک فایل داخل هارد شما ذخیره میکنه پس با این کار بعیده که اطلاعتی از دست بره برای فعال سازی این قابلیت کافیه که درون فایل کانفیگ Redis قسمت appendonly از no به yes تغیر بدید.
بالاتر اشاره کردم که Redis کاربرد های زیادی داره که تغریبا توی تمام اون زمینه ها هم خوب عمل کرده این قسمت قراره که با این کاربرد ها آشنا بشیم.
پایگاه داده
ردیس میتونه برای ما نقش یک پایگاه داده بازی کنه - یعنی با استفاده از اون میتونیم یکسری اطلاعات به صورت key و value درون رم ذخیره کنیم و یا یکسری از value هارو با key شون بخونیم. مزیت اون نسبت به بقیه پایگاه های داده سرعت فوق العاده زیاد اونو که واقعا شگفت انگیزه.
سیستم Cache
یکی از کاربرد های اصلی و مهم Redis اینه که میتونه نقش Caching توی پروژه ما به عهده بگیره. تغریبا به جرعت میشه گفت که Redis در این زمینه بهترین گزینه موجوده و سیستم های زیادی مانند لاراول از اون به صورت داخلی پشتیبانی می کنن و همین طور اونو برای سیستم Caching پیشنهاد میدن.
سیستم message broker
قبلا توی مقاله RabbitMQ چیست ؟ و چه استفاده ای دارد ؟ درباره سیستم های message broker صحبت کردم اما شاید بعدا درمورد اون بعدا یک مقاله کامل بنویسم. ولی شما در این حد بدونید که message broker ها میتونن یک پیام از یک برنامه به یک برنامه دیگه ارسال کنن فارق از این که زبان برنامه نویسی و محیط این دو برنامه چیه و چطور کار میکنه یا توی یک سرور هستن یا نیستن.
خب Redis هم توی این زمینه کار کرده البته که توی این زمینه به قدرت RabbitMQ کار نکرده ولی این سیستم ویژگی های خودشو داره که تغریبا سناریو های قابل استفاده زیادی برای خودش ایجاد کرده که میتونه حتی بهتر از RabbitMQ فعالیت کنه.
اگه میخواید در این زمینه از Redis بیشتر بدونید باید بگم که Redis به این قابلیت Pub/Sub میگه که تغریبا خیلی سادس کافیه سیستم فرستنده PUBLISH کنه و سیستم گیرنده SUBSCRIBE کنه که خیلی راحت با یک خط دستور میشه این کارو کرد. مزیت Redis مثل همیشه دوباره سرعت اونه که تغریبا بی نظیره.
برعکس RabbitMQ اینجا هیج خبری از exchange و queue نیست و مراحل خیلی ساده انجام میشه اینم در جریان باشید که اطلاعات ارسالی از publisher به subscriber هیچ جا ذخیره نمیشه و اگه subscriber وجود نداشته باشه اطلاعات از بین میره.
مثال جالب Redis Pub/Sub در این زمینه اینکه Redis مثل تلوزیون که یک فیلم PUBLISH میکنه و یک بیننده اون فیلم SUBSCRIBE میکنه و اگه بیننده وجود نداشته باشه همه اطلاعات ازبین میره.
برای نصب Redis روش پیشنهادی من استفاده از داکر برای نصب Redis چون خیلی راحت و بدون دردسر میتونید فارق از اینکه سیستم عامل شما چیه اونو نصب کنید و باهاش کار کنید برای اینکه بدونید چطوری میتونید Redis با استفاده از داکر نصب کنید کافیه یه نگاهی به مقاله زیر بندازید
برای اینکه بتونید Redis رو به صورت کامل و کاربردی یاد بگیرید لازمه که یک دوره مناسب رو بگذرونید. اینجا من یکسری دوره خوب بهتون معرفی میکنم که کار شما رو راحت تر کنم.
۱- آموزش تصویری فارسی
توی این زمینه سایت mongard دوره کامل Redis به صورت دقیق و کامل آموزش داده که میتونید این دوره رو از لینک زیر دنبال کنید
۲- آموزش تصویری فارسی
یکی از سایت های معروف دیگه که این مبحث به خوبی پوشش داده سایت roocket هست. برای دسترسی به دوره Redis این سایت میتونید از لینک زیر استفاده کنید.
خب به آخر این مقاله رسیدیم امیدوارم که با خوندن این مقاله درک مناسبی از Redis پیدا کرده باشید و با استفاده از آموزش های معرفی شده اونو به خوبی یاد بگیرید و توی پروژه های خودتون ازش استفاده کنید. الان که دارم تایمری که از اول مقاله ست کردم تا بتونم اندازه گیری کنم نوشتن مقاله چقد از من زمان میگیره نگاه میکنم بیش از ۲ ساعته که من مشغول نوشتن این مقاله هستم. توی این راه فقط لایک ها و نظرات شما و البته به اشتراک گذاری های شماست که میتونه این انگیزه رو به من بده که مقالات بیشتر و بهتری برای شما بنویسم پس حمایت های گرمتون رو از من دریغ نکنید.