پرش به مطلب اصلی

Redis

ویدیو: راه‌اندازی Redis مدیریت‌شدهplaceholder — ویدیو را اینجا جایگزین کنید

ابرکلیک سرویس 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 اعمال می‌شود:

مقدار storagemaxmemory Redis
0.5 GB512 MB
1 GB1024 MB
2 GB2048 MB
4 GB4096 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> نمایش داده می‌شود (پلن‌های پولی).