کش توزیع‌شده

Memcached مدیریت‌شده برای کش ساده و سریع

Memcached فقط یک کار را خوب انجام می‌دهد: کش کلید-مقدار در حافظه. اگر به ساختار داده و ماندگاری نیاز ندارید، ساده‌ترین گزینه است.

نسخه
Memcached 1.6
ذخیره
فقط در RAM
پورت
11211
دسترسی
فقط از اپ‌های همان پروژه
لوگوی Memcached

کش، بدون هیچ چیز اضافه

Memcached داده را فقط در حافظه نگه می‌دارد و هیچ دیسکی ندارد؛ برای کش نتیجه‌ی کوئری، قطعه‌های صفحه و session در فریم‌ورک‌هایی مثل Django و PHP انتخاب رایجی است.

Memcached برای مواجهه با اینترنت طراحی نشده است، پس سکو کلود دسترسی عمومی آن را فعال نمی‌کند. اپ و Memcached را در یک پروژه بگذارید تا فقط اپ‌های همان پروژه به آن دسترسی داشته باشند.

مناسب برای

  • کش کوئری دیتابیس
  • کش قطعه‌های صفحه
  • session در PHP و Django
  • کاهش بار دیتابیس اصلی

از ساخت تا اتصال

  1. ساخت

    حافظه‌ی کش را انتخاب کنید.

    --type memcached
  2. لینک به اپ

    میزبان و پورت با پیشوند MEMCACHED تزریق می‌شوند.

    --prefix MEMCACHED
  3. استفاده

    کلاینت آدرس را از MEMCACHED_HOST و MEMCACHED_PORT می‌سازد؛ نام کاربری و رمز ندارد و دسترسی را شبکه‌ی خصوصی پروژه محدود می‌کند.

    MEMCACHED_HOST:MEMCACHED_PORT

خروجی ساخت سرویس

sakoocloud db
sakoocloud db create --name page-cache --type memcached
✔ Provisioning page-cache · db_4n8x2p
ℹ Ready in ~90s. Get credentials: sakoocloud db credentials db_4n8x2p
sakoocloud apps link-db db_4n8x2p --app my-api --prefix MEMCACHED
✔ Linked database. Env vars injected under MEMCACHED_*.
# MEMCACHED_HOST=… MEMCACHED_PORT=11211

ساخت Memcached

با CLI یا از کنسول.

terminal
sakoocloud db create --name page-cache --type memcached

تنظیمات

متغیرهایی که به اپ تزریق می‌شوند

پیشوند پیش‌فرض DATABASE است؛ با --prefix می‌توانید نام دیگری بدهید، مثلاً MEMCACHED.

متغیرمقدار
MEMCACHED_HOSTآدرس داخلی
MEMCACHED_PORT11211

اتصال از اپ

میزبان و پورت را به کلاینت بدهید.

import os

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
        "LOCATION": f'{os.environ["MEMCACHED_HOST"]}:{os.environ["MEMCACHED_PORT"]}',
    }
}

رانتایم‌هایی که معمولاً به آن وصل می‌شوند

خطاهای رایج

Connection refused

علتاپ در پروژه‌ی دیگری است یا میزبان دستی وارد شده.

راه‌حلاپ و Memcached را در یک پروژه بگذارید و لینک کنید.

بعد از ری‌استارت داده‌ها نیستند

علتاین سرویس داده را در حافظه نگه می‌دارد و پشتیبان‌گیری مدیریت‌شده ندارد.

راه‌حلداده‌ای که از دست رفتنش قابل قبول نیست را در PostgreSQL یا MongoDB نگه دارید و این سرویس را فقط برای کش یا داده‌ی موقت استفاده کنید.

دسترسی عمومی فعال نمی‌شود

علتMemcached احراز هویت امن برای اینترنت ندارد و عمداً عمومی نمی‌شود.

راه‌حلاز داخل اپ‌های همان پروژه وصل شوید.

پرسش‌های متداول

Memcached یا Redis؟

برای کش ساده کلید-مقدار، Memcached سبک‌تر است. اگر ساختار داده، صف یا Pub/Sub لازم دارید، Redis را انتخاب کنید.

داده‌ها بعد از ری‌استارت می‌مانند؟

نه. Memcached فقط در حافظه است و برای کش طراحی شده.

چرا از بیرون نمی‌توانم وصل شوم؟

برای امنیت، دسترسی Memcached فقط از اپ‌های همان پروژه ممکن است.

جزئیات بیشتر در راهنمای Memcached در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

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

~/projects/my-app
امتحان کنید