Redis
ابرکلیک سرویس Redis 7.2 مدیریتشده را بهصورت یککلیکی ارائه میدهد. بدون نصب، بدون کانفیگ — فقط یک دستور و Redis آماده است.
ساخت دیتابیس Redis
abrclick db create --name cache --type redis
برای تعیین نسخه و فضای ذخیرهسازی:
abrclick db create --name cache --type redis --version 7.2 --storage 2
مقدار --storage برای Redis بهعنوان حداکثر حافظه (maxmemory) در نظر گرفته میشود. سیاست پیشفرض تخلیه حافظه allkeys-lru است — قدیمیترین کلیدها اول حذف میشوند.
بعد از ساخت، اطلاعات دیتابیس را ببینید:
abrclick db info <dbId>
خروجی نمونه:
Name: cache
Type: redis
Version: 7.2
Status: running
Host: redis-xxxxx.tenant-myproject.svc.cluster.abrclick.ir
Port: 6379
Storage: 2 GB (= maxmemory)
اتصال به Redis
از طریق CLI
abrclick db connect <dbId>
این دستور مستقیماً redis-cli را باز میکند و به دیتابیس شما متصل میشود:
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> SET hello world
OK
127.0.0.1:6379> GET hello
"world"
دریافت اطلاعات اتصال
abrclick db credentials <dbId>
خروجی شامل:
Host: redis-xxxxx.tenant-myproject.svc.cluster.abrclick.ir
Port: 6379
Password: <رمز عبور>
URL: redis://:PASSWORD@HOST:6379
اتصال بدون رمز عبور رد میشود. Redis مدیریتشده ابرکلیک همیشه requirepass فعال دارد.
سطوح پشتیبانی
پلنهای پایه (cloud / rain / snow)
Redis در حالت in-memory اجرا میشود — پرسیستنس فعال نیست. بعد از ریاستارت، تمام دادهها پاک میشوند.
مناسب برای:
- کش نتایج API یا دیتابیس
- نگهداری session کاربران
- Rate limiting
- دادههای موقت
پلنهای استاندارد و بالاتر (thunder / storm)
AOF persistence فعال است — هر تغییر به فایل append-only نوشته میشود. بعد از ریاستارت دادهها بازیابی میشوند.
appendonly yes
appendfsync everysec
پلن Enterprise
Cluster mode — چند نود Redis برای مقیاسپذیری افقی. دادهها بهصورت sharded بین نودها توزیع میشوند.
برای پلن Enterprise با تیم فروش تماس بگیرید: abrclick.ir
تنظیم maxmemory
مقدار --storage که موقع ساخت دیتابیس تعیین میکنید، مستقیماً به عنوان maxmemory اعمال میشود:
| مقدار storage | maxmemory Redis |
|---|---|
| 0.5 GB | 512 MB |
| 1 GB | 1024 MB |
| 2 GB | 2048 MB |
| 4 GB | 4096 MB |
سیاست پیشفرض تخلیه: allkeys-lru
وقتی حافظه پر شود، قدیمیترین کلیدها (بر اساس آخرین دسترسی) حذف میشوند. این رفتار برای کش ایدهآل است.
استفاده در اپلیکیشن
اتصال app به Redis
ابتدا credentials را بگیرید:
abrclick db credentials <dbId>
سپس URL را بهعنوان متغیر محیطی به اپ خود اضافه کنید. اگر اپ و Redis در یک پروژه باشند، از داخل cluster مستقیم وصل میشوید.
Node.js (ioredis)
import Redis from 'ioredis';
const redis = new Redis({
host: process.env.REDIS_HOST,
port: 6379,
password: process.env.REDIS_PASSWORD,
});
// کش ساده
await redis.set('key', 'value', 'EX', 3600); // TTL = 1 ساعت
const value = await redis.get('key');
Node.js با BullMQ
import { Queue, Worker } from 'bullmq';
const connection = {
host: process.env.REDIS_HOST,
port: 6379,
password: process.env.REDIS_PASSWORD,
};
const emailQueue = new Queue('emails', { connection });
// اضافه کردن job
await emailQueue.add('send-welcome', { userId: 123 });
// پردازش job
const worker = new Worker('emails', async (job) => {
console.log('Sending email to user', job.data.userId);
}, { connection });
Python (redis-py)
import redis
import os
r = redis.Redis(
host=os.environ['REDIS_HOST'],
port=6379,
password=os.environ['REDIS_PASSWORD'],
decode_responses=True,
)
# کش
r.setex('session:abc123', 1800, 'user_data_json')
session = r.get('session:abc123')
Go (go-redis)
import (
"context"
"github.com/redis/go-redis/v9"
"os"
)
rdb := redis.NewClient(&redis.Options{
Addr: os.Getenv("REDIS_HOST") + ":6379",
Password: os.Getenv("REDIS_PASSWORD"),
DB: 0,
})
ctx := context.Background()
err := rdb.Set(ctx, "key", "value", 0).Err()
val, err := rdb.Get(ctx, "key").Result()
PHP (Predis)
$client = new Predis\Client([
'scheme' => 'tcp',
'host' => $_ENV['REDIS_HOST'],
'port' => 6379,
'password' => $_ENV['REDIS_PASSWORD'],
]);
$client->set('key', 'value');
$value = $client->get('key');
کاربردهای رایج
ذخیره Session
// ذخیره session بعد از لاگین
await redis.set(
`session:${sessionId}`,
JSON.stringify({ userId, role }),
'EX',
86400 // 24 ساعت
);
// خواندن session
const data = await redis.get(`session:${sessionId}`);
Pub/Sub
// Publisher
const pub = new Redis({ host, password });
await pub.publish('notifications', JSON.stringify({ type: 'order', id: 42 }));
// Subscriber
const sub = new Redis({ host, password });
sub.subscribe('notifications');
sub.on('message', (channel, message) => {
const event = JSON.parse(message);
console.log('Received:', event);
});
Rate Limiting
async function rateLimit(userId: string): Promise<boolean> {
const key = `ratelimit:${userId}`;
const count = await redis.incr(key);
if (count === 1) {
await redis.expire(key, 60); // پنجره ۶۰ ثانیه
}
return count <= 100; // حداکثر ۱۰۰ درخواست در دقیقه
}
حذف دیتابیس
abrclick db delete <dbId>
Redis در ابرکلیک پشتیبانگیری مدیریتشده ندارد — این یک پایگاه داده حافظهای است. پیش از حذف، دادههای مهم را با abrclick db connect صادر کنید یا از رویکرد application-side backup استفاده کنید.
محدودیتهای مهم
| محدودیت | مقدار |
|---|---|
| نسخه | Redis 7.2 |
| سیاست تخلیه | allkeys-lru (پیشفرض) |
| حداکثر connections | ۱۰۰۰۰ |
| پرسیستنس در پلن رایگان | ندارد |
| دسترسی عمومی | دارد (پلنهای پولی) |
پایگاه داده Redis از طریق gateway عمومی (HAProxy) در دسترس است. برای اتصال از محیط توسعه محلی یا ابزارهای خارجی، اطلاعات gateway در abrclick db credentials <dbId> نمایش داده میشود (پلنهای پولی).