Rails Caching: یک آموزش سریع
انتشار: تیر 13، 1402
بروزرسانی: 27 خرداد 1404

Rails Caching: یک آموزش سریع

Rails از چندین نوع ذخیره کش یا پشتیبان خارج از جعبه پشتیبانی می کند که در زیر به تفصیل توضیح داده شده است.

فروشگاه حافظه

استفاده از کش در برنامه Rails می تواند عملکرد و مقیاس پذیری آن را به طور قابل توجهی افزایش دهد، به خصوص زمانی که بهترین روش های زیر را اجرا می کنید:

  • کش انتخابی: داده هایی که اغلب به آنها دسترسی پیدا می کند، گران قیمت هستند یا داده هایی که به ندرت به روزرسانی می شوند را در حافظه پنهان ذخیره کنید. برای جلوگیری از استفاده بیش از حد از حافظه، خطرات داده های قدیمی و کاهش عملکرد، از ذخیره بیش از حد خودداری کنید.
  • منقضی شدن ورودی های حافظه پنهان: با انقضای ورودی های نامعتبر یا نامربوط، از داده های قدیمی جلوگیری کنید. از مهر زمانی، گزینه های انقضا، یا باطل کردن دستی استفاده کنید.
  • بهینه سازی عملکرد حافظه پنهان: حافظه پنهان را متناسب با نیازهای برنامه خود انتخاب کنید و پارامترهای آن - مانند اندازه، فشرده سازی یا سریال سازی - را برای عملکرد بهینه تنظیم کنید.
  • نظارت و آزمایش تأثیر حافظه پنهان: رفتار حافظه پنهان - مانند نرخ ضربه، نرخ از دست دادن و تأخیر - را ارزیابی کنید و تأثیرات مربوطه را بر عملکرد (زمان پاسخ، توان عملیاتی، استفاده از منابع) ارزیابی کنید. از ابزارهایی مانند New Relic، Rails logs، ActiveSupport notifications یا Rack mini profiler استفاده کنید.

خلاصه

همانند ذخیره سازی قطعه معمولی، ذخیره سازی عروسک روسی نیز از آن استفاده می کند cache روش کمکی به عنوان مثال، برای ذخیره یک دسته با زیرمجموعه ها و محصولات آن در دید شما، چیزی شبیه به این بنویسید:

Rails می تواند از مهرهای زمانی برای مدیریت خودکار بیشتر وابستگی های حافظه پنهان استفاده کند. هر مدل Active Record دارای created_at و updated_at ویژگی هایی که نشان می دهد حافظه نهان چه زمانی رکورد را ایجاد کرده یا آخرین به روز رسانی کرده است. برای اطمینان از اینکه Rails می تواند به طور خودکار ذخیره سازی را مدیریت کند، روابط مدل های Active Record خود را به صورت زیر تعریف کنید:

<% @categories.each do |category| %>
  <% cache category do %>
    <h2><%= category.name %></h2>
    <% category.subcategories.each do |subcategory| %>
    <% cache subcategory do %>
    <h3><%= subcategory.name %></h3>
    <% subcategory.products.each do |product| %>
    <% cache product do %>
        <%= render partial: "product", locals: { product: product } %>
        <% end %>
    <% end %>
    <% end %>
    <% end %>
  <% end %>
<% end %>

را fetch متد ابتدا سعی می کند داده ها را از حافظه پنهان بخواند. اگر نتواند داده ها را پیدا کند یا داده ها منقضی شده باشند، بلوک را اجرا می کند و نتیجه را در حافظه پنهان ذخیره می کند.

فروشگاه Memcached از یک نمونه Memcached برای ذخیره سازی کش استفاده می کند. Memcached یک ذخیره سازی با مقدار کلید در حافظه است که از انواع داده ها و ویژگی های ساده پشتیبانی می کند. سریع و مقیاس پذیر است، اما مانند Redis، به سرور و پیکربندی جداگانه نیاز دارد. این فروشگاه برای برنامه هایی مناسب است که نیاز به کش کردن داده های ساده یا ثابت دارند که به طور مکرر به روز رسانی می شوند.

کش کردن عروسک روسی یک استراتژی ذخیره سازی قدرتمند در Ruby on Rails است که با قرار دادن کش ها در داخل یکدیگر، عملکرد برنامه شما را بهینه می کند. برای به حداقل رساندن کار اضافی و بهبود زمان بارگذاری، از کش کردن قطعه Rails و وابستگی های کش استفاده می کند.

همه برنامه ها، پایگاه های داده و سایت های وردپرس خود را آنلاین و زیر یک سقف دریافت کنید. پلت فرم ابری پر از ویژگی ها و عملکرد بالا ما شامل موارد زیر است:

  • راه اندازی و مدیریت آسان در داشبورد MyKinsta
  • پشتیبانی تخصصی 24 ساعته
  • بهترین سخت افزار و شبکه Google Cloud Platform که توسط Kubernetes برای حداکثر مقیاس پذیری ارائه شده است
  • یک ادغام Cloudflare در سطح سازمانی برای سرعت و امنیت
  • مخاطبان جهانی با حداکثر 35 مرکز داده و 260 PoP در سراسر جهان به دست می آیند

همچنین می توانید زمان انقضا را تعیین کنید:

همچنین می توانید با انتقال گزینه ها به کلید حافظه پنهان، آن را سفارشی کنید cache یاور. به عنوان مثال، برای گنجاندن شماره نسخه یا مهر زمانی در کلید حافظه پنهان، چیزی شبیه به این بنویسید:

Rails.cache.write("products/average_price", Product.average(:price), force: true))

فروشگاه های کش و بک اند در Ruby on Rails

برای استفاده از حافظه پنهان قطعه در Rails، از cache روش کمکی در دیدگاه شما به عنوان مثال، کد زیر را بنویسید تا یک محصول در نمای خود پنهان شود:

در یک برنامه معمولی Rails، شما اغلب مجموعه ای از آیتم ها را ارائه می کنید که هر کدام دارای چندین مؤلفه فرزند هستند. هنگام به روزرسانی یک مورد، از رندر مجدد کل مجموعه یا هر موردی که تحت تأثیر قرار نگرفته اند، خودداری کنید. هنگامی که با ساختارهای داده سلسله مراتبی یا تودرتو سروکار دارید، از کش کردن عروسک روسی استفاده کنید، به خصوص زمانی که اجزای تودرتو داده های مرتبط خود را دارند که می توانند به طور مستقل تغییر کنند.

این مثال نشان می دهد که چگونه داده های محاسبه شده - مانند میانگین قیمت همه محصولات - را برای یک ساعت با استفاده از حافظه پنهان ذخیره کنید fetch روش با یک کلید سفارشی (products/average_price) و یک گزینه انقضا (expires_in: 1.hour).

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



دو نوع دیگر کش قبلاً بخشی از Ruby on Rails بودند اما اکنون به عنوان سنگهای جداگانه در دسترس هستند:

  • ذخیره صفحه: کل صفحات وب را به صورت فایل های ثابت روی سرور ذخیره می کند و کل چرخه رندر صفحه را دور می زند
  • ذخیره کنش: خروجی کل اقدامات کنترلر را در حافظه پنهان ذخیره می کند. این شبیه به کش صفحه است اما به شما امکان می دهد فیلترهایی مانند احراز هویت را اعمال کنید.

در این مثال:

  • اگر یک رکورد محصول را به روز کنید (مثلاً با تغییر قیمت آن)، updated_at مهر زمانی به طور خودکار تغییر می کند.
  • اگر از این مهر زمانی به عنوان بخشی از کلید حافظه پنهان خود استفاده می کنید (مانند products/1-20230504000000، همچنین به طور خودکار قطعه ذخیره شده شما را باطل می کند.
  • برای باطل کردن قطعه ذخیره شده در حافظه پنهان دسته خود هنگام به روز رسانی یک رکورد محصول - شاید به این دلیل که داده های جمع آوری شده مانند قیمت متوسط \u200b\u200bرا نشان می دهد - از touch روش در کنترلر شما (@product.category.touch) یا a اضافه کنید touch گزینه در انجمن مدل شما (belongs_to :category touch: true).

حافظه پنهان برای افزایش عملکرد و مقیاس پذیری برنامه های کاربردی وب ضروری است - و ذخیره سازی در Ruby on Rails از این قاعده مستثنی نیست. با ذخیره و استفاده مجدد از نتایج محاسبات گران قیمت یا پرس و جوهای پایگاه داده، کش کردن به طور قابل توجهی زمان و منابع مورد نیاز برای ارائه درخواست های کاربر را کاهش می دهد.

مثال اول ضمیمه خواهد شد v1 به کلید حافظه پنهان (به عنوان مثال، products/1-v1). این برای باطل کردن حافظه پنهان هنگام تغییر قالب یا طرح بندی جزئی مفید است. مثال دوم یک زمان انقضا برای ورودی حافظه پنهان (1 ساعت) تعیین می کند، که به منقضی شدن داده های قدیمی کمک می کند.

نگهداری عروسک روسی در روبی روی ریل

برای بی اعتبار کردن دستی یک ورودی حافظه پنهان قبل از زمان انقضای آن، از write روش با force گزینه:

در اینجا نحوه پیاده سازی انواع کش در Rails مانند ذخیره قطعه و کش عروسکی روسی را بررسی می کنیم. ما همچنین به شما نشان می دهیم که چگونه وابستگی های کش را مدیریت کنید و فروشگاه های کش را انتخاب کنید و بهترین روش ها را برای استفاده مؤثر از کش در برنامه Rails بیان می کنیم.