کش، بدون هیچ چیز اضافه
Memcached داده را فقط در حافظه نگه میدارد و هیچ دیسکی ندارد؛ برای کش نتیجهی کوئری، قطعههای صفحه و session در فریمورکهایی مثل Django و PHP انتخاب رایجی است.
Memcached برای مواجهه با اینترنت طراحی نشده است، پس سکو کلود دسترسی عمومی آن را فعال نمیکند. اپ و Memcached را در یک پروژه بگذارید تا فقط اپهای همان پروژه به آن دسترسی داشته باشند.
مناسب برای
- کش کوئری دیتابیس
- کش قطعههای صفحه
- session در PHP و Django
- کاهش بار دیتابیس اصلی
از ساخت تا اتصال
ساخت
حافظهی کش را انتخاب کنید.
--type memcachedلینک به اپ
میزبان و پورت با پیشوند MEMCACHED تزریق میشوند.
--prefix MEMCACHEDاستفاده
کلاینت آدرس را از
MEMCACHED_HOSTوMEMCACHED_PORTمیسازد؛ نام کاربری و رمز ندارد و دسترسی را شبکهی خصوصی پروژه محدود میکند.MEMCACHED_HOST:MEMCACHED_PORT
خروجی ساخت سرویس
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 یا از کنسول.
sakoocloud db create --name page-cache --type memcached
تنظیمات
متغیرهایی که به اپ تزریق میشوند
پیشوند پیشفرض DATABASE است؛ با --prefix میتوانید نام دیگری بدهید، مثلاً MEMCACHED.
| متغیر | مقدار |
|---|---|
MEMCACHED_HOST | آدرس داخلی |
MEMCACHED_PORT | 11211 |
اتصال از اپ
میزبان و پورت را به کلاینت بدهید.
import os
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
"LOCATION": f'{os.environ["MEMCACHED_HOST"]}:{os.environ["MEMCACHED_PORT"]}',
}
}
<?php
$m = new Memcached();
$m->addServer(getenv("MEMCACHED_HOST"), (int) getenv("MEMCACHED_PORT"));
خطاهای رایج
Connection refused
علتاپ در پروژهی دیگری است یا میزبان دستی وارد شده.
راهحلاپ و Memcached را در یک پروژه بگذارید و لینک کنید.
بعد از ریاستارت دادهها نیستند
علتاین سرویس داده را در حافظه نگه میدارد و پشتیبانگیری مدیریتشده ندارد.
راهحلدادهای که از دست رفتنش قابل قبول نیست را در PostgreSQL یا MongoDB نگه دارید و این سرویس را فقط برای کش یا دادهی موقت استفاده کنید.
دسترسی عمومی فعال نمیشود
علتMemcached احراز هویت امن برای اینترنت ندارد و عمداً عمومی نمیشود.
راهحلاز داخل اپهای همان پروژه وصل شوید.
پرسشهای متداول
Memcached یا Redis؟
برای کش ساده کلید-مقدار، Memcached سبکتر است. اگر ساختار داده، صف یا Pub/Sub لازم دارید، Redis را انتخاب کنید.
دادهها بعد از ریاستارت میمانند؟
نه. Memcached فقط در حافظه است و برای کش طراحی شده.
چرا از بیرون نمیتوانم وصل شوم؟
برای امنیت، دسترسی Memcached فقط از اپهای همان پروژه ممکن است.
جزئیات بیشتر در راهنمای Memcached در مستندات و مرجع CLI.