در حالت عادی زمانی که
query به سمت دیتابیس میرود این درخواست دیتا را از روی دیسک خوانده و پاسخ
را برای کاربر فراهم میکند. اما علاوه بر کندی دیسک ، تعداد درخواست بالا
از دیتابیس موجب میشود زمان پاسخ گویی به شدت افزایش یابد در چنین موارد راه
حل هایی مثل ایندکس کردن و یا استفاده مکانیزم های load balancing که در مقاله قبلی اشاره شد میتواند تا حدودی سرعت را بهبود ببخشد.
در این
مقاله قصد بررسی روش جدید تر و بهینه تری را داریم که تاثیر بسیار چشم گیری
تری در کاهش زمان پاسخ گویی سرور دارد. استفاده از محبوب ترین لایه data
storage های cache یعنی
Redis چیست ؟
Redis یک data storage است که ذخیره سازی قسمتی از داده ها را در لایه کش و برروی ram انجام میدهد بدین ترتیب سرعت فراخوانی اطلاعات بسیار بالا رفته و به جای اینکه دیتا از دیسک فراخوانی شود پاسخ ان در کش وجود دارد. این لایه به عنوان دیتابیس اصلی نیست و به عنوان بخشی جدید به سیستم اضافه میگردد .
همانطور که در تصویر مشاهده میکنید REDIS بین کاربر و DBMS قرار میگیرد و شامل بخشی از دیتا میباشد در صورتی که REQUEST کاربر در درخواست های قبلی RETRIEVE شده باشد زمانی که مجدد این دیتا درخواست شود در CACHE موجود بوده و پاسخ داده میدهد و در غیر این صورت REQUEST به سمت دیتابیس اصلی میرود . درواقع مثل دیتابیس بسیار کوچکی است که امکان READ/WRITE دیتا را نیز میدهد.
مکانیزم عملکرد:
هر کوئری موجوددر لایه کش یک KEY مخصوص خود دارد که ان را از سایرین متمایز میکند . فرض کنید لیستی از کتاب های یک نویسنده را میخواهیم این دیتا در ردیس وجود دارد ولی اگر پس از کش شدن کتاب جدید دیگری به دیتابیس اضافه شود شما هیچ وقت نمیتوانید ان را ببینید. به همین دلیل کوئری ها دارای ttl میباشند و پس از گذشت زمان مشخصی حذف میشوند به علاوه هر زمان که دیتابیس اپدیت شود کوئری های مربوطه ان حذف میگردد.
لازم به ذکر است در کوئری توسط یک flag مشخص میشود ایا درخواست از redis شده و یا باید مستقیم به دیتابیس اصلی برسد.
دیتای رم موقتی است و با ریبوت از بین میرود لذا برای persist شدن ان میتوان به طور پریودیک دیتا را در دیسک dump کرد.
Redis در حال حاضر فقط برروی لینوکس پیاده سازی میشود و فعلا ساپورت رسمی از ویندوز ندارد.
تعدادی از سایت های معروفی که از redis استفاده میکنند:
• Twitter.
• GitHub.
• Weibo.
• Pinterest.
• Snapchat.
• StackOverflow.