مستندات n8n
74+ نود
🔴

ردیس

Redis

دیتابیس in-memory سریع برای caching، rate limiting، queues و real-time messaging

دیتابیس
متوسط
۰ بازدید
n8n 1.0+

نمای کلی

نود Redis چیست؟

نود Redis امکان اتصال و کار با Redis (Remote Dictionary Server) را در n8n فراهم می‌کند. Redis یک data structure server با سرعت فوق‌العاده بالاست.

چرا Redis؟

  • سرعت فوق‌العاده: عملیات در کمتر از ۱ میلی‌ثانیه (in-memory)
  • Data Structures: پشتیبانی از String, List, Set, Sorted Set, Hash, Stream
  • TTL (Time-to-Live): expiry خودکار برای keys
  • Pub/Sub: سیستم پیام‌رسانی real-time
  • Atomic Operations: عملیات‌های thread-safe
  • Persistence: ذخیره داده روی دیسک (RDB/AOF)
  • Cluster: مقیاس‌پذیری افقی

قابلیت‌های کلیدی در n8n:

  • Key-Value Operations: GET, SET, DELETE, EXISTS
  • TTL Management: تنظیم و مدیریت زمان انقضا
  • List Operations: Push, Pop, Range
  • Set Operations: Add, Remove, Members, Intersection
  • Hash Operations: مدیریت فیلدهای hash
  • Pub/Sub: Publish و Subscribe پیام‌ها
  • Increment/Decrement: شمارنده‌های اتمیک
  • Key Pattern: جستجو با pattern (KEYS, SCAN)

Redis در معماری n8n:

code
[Workflow A] → Redis SET → [Cache Layer] → Redis GET → [Workflow B]
[Workflow C] → Redis PUBLISH → [Channel] → Redis SUBSCRIBE → [Workflow D]
[API Request] → Redis INCR → [Rate Counter] → IF > limit → Block

احراز هویت

احراز هویت Redis

اتصال ساده (بدون رمز)

  1. 1در n8n به Credentials بروید
  2. 2Redis را انتخاب کنید
  3. 3تنظیمات:
  • **Host**: آدرس سرور (مثلاً localhost یا redis.example.com)
  • **Port**: پورت (پیش‌فرض 6379)
  • **Database**: شماره دیتابیس (پیش‌فرض 0، بازه ۰-۱۵)

اتصال با رمز عبور

  1. 1مثل بالا + Password را وارد کنید
  2. 2در Redis config: requirepass yourpassword

اتصال با ACL (Redis 6+)

  1. 1Username و Password را وارد کنید
  2. 2از Redis ACL برای مدیریت دسترسی granular استفاده کنید

اتصال با TLS/SSL

  1. 1TLS را فعال کنید
  2. 2اگر certificate خاصی دارید، آن را تنظیم کنید
  3. 3برای Redis Cloud و managed services معمولاً TLS لازم است

Connection String Format:

code
redis://username:password@host:port/database
redis://:password@localhost:6379/0
rediss://user:pass@host:6380/0  (with TLS)

نصب Redis (Self-hosted):

Docker (توصیه شده):

bash
docker run -d --name redis \
  -p 6379:6379 \
  -v redis_data:/data \
  redis:alpine redis-server --requirepass "your_password" --appendonly yes

با Redis Stack (شامل JSON, Search, TimeSeries):

bash
docker run -d --name redis-stack \
  -p 6379:6379 \
  -p 8001:8001 \
  redis/redis-stack:latest

سرویس‌های Managed:

  • Redis Cloud: رایگان تا ۳۰MB
  • Upstash: serverless Redis (رایگان تا ۱۰K commands/day)
  • AWS ElastiCache: managed Redis
  • Azure Cache: managed Redis

⚠️ نکته ایران: Redis self-hosted روی سرور خودتان بهترین گزینه است.

عملیات‌های موجود

1

get

دریافت مقدار یک key

2

set

ذخیره یک مقدار با key

3

delete

حذف یک یا چند key

4

keys

جستجوی keys با pattern

5

incr

افزایش مقدار عددی key به میزان ۱ یا مقدار دلخواه

6

decr

کاهش مقدار عددی key

7

expire

تنظیم زمان انقضا برای key موجود

8

ttl

دریافت زمان باقی‌مانده تا انقضا

9

exists

بررسی وجود یک key

10

lpush

اضافه کردن مقدار به ابتدای لیست

11

rpush

اضافه کردن مقدار به انتهای لیست

12

lpop

برداشتن و حذف مقدار از ابتدای لیست

13

lrange

دریافت بازه‌ای از لیست

14

sadd

اضافه کردن عضو به Set

15

smembers

دریافت همه اعضای Set

16

hset

ذخیره فیلد و مقدار در Hash

17

hget

دریافت مقدار یک فیلد از Hash

18

hgetall

دریافت همه فیلدها و مقادیر Hash

19

publish

انتشار پیام به یک channel (Pub/Sub)

کاربردهای متداول

کاربردهای رایج

۱. API Response Caching

نتایج API‌های کُند یا rate-limited را cache کنید تا سریع‌تر پاسخ دهید.

code
API Request → Redis GET (بررسی cache) → IF (exists?) →
  Yes: استفاده از cache
  No: HTTP Request → Redis SET (TTL: 3600) → ادامه workflow

۲. Rate Limiting

محدود کردن تعداد درخواست‌ها از هر IP یا کاربر.

code
Webhook → Redis INCR (key: rate:IP) → Redis EXPIRE (60 sec) →
  IF (count > 100) → Response 429 Too Many Requests
  ELSE → ادامه پردازش

۳. Session Management

ذخیره و مدیریت session‌های کاربران با TTL خودکار.

code
Login → Redis HSET (session:userId, {token, role, loginAt}) →
  Redis EXPIRE (session:userId, 86400) → Response

۴. Job Queue (صف کار)

صف پردازش تسک‌ها با LPUSH/RPOP.

code
Producer: Webhook → Redis LPUSH (queue:emails, payload)
Consumer: Schedule (هر دقیقه) → Redis RPOP (queue:emails) → Email Send

۵. Real-time Notifications (Pub/Sub)

ارسال اعلان real-time بین workflow‌ها.

code
Workflow A: Event → Redis PUBLISH (channel: orders, message)
Workflow B: Redis SUBSCRIBE (channel: orders) → Telegram → Email

۶. Distributed Lock

جلوگیری از اجرای همزمان یک workflow حساس.

code
Redis SET (lock:payment, 1, NX, EX 30) →
  IF (success) → پردازش پرداخت → Redis DEL (lock:payment)
  ELSE → Wait → Retry

۷. Counter و Statistics

شمارش بازدید، لایک، دانلود و آمار real-time.

code
Webhook (page view) → Redis INCR (views:page:123) →
  Redis INCR (views:daily:2024-01-15) → Response

۸. Leaderboard (تابلو امتیازات)

مدیریت رتبه‌بندی با Sorted Sets.

code
Event (score) → Redis ZADD (leaderboard, score, userId) →
  Redis ZREVRANGE (leaderboard, 0, 9) → Top 10 Users

۹. Deduplication

جلوگیری از پردازش تکراری پیام‌ها با Set.

code
Message → Redis SISMEMBER (processed, messageId) →
  IF (not member) → پردازش → Redis SADD (processed, messageId)
  ELSE → Skip

۱۰. Feature Flags

مدیریت Feature flags برای فعال/غیرفعال کردن قابلیت‌ها.

code
Redis HGETALL (features) → IF (feature:dark_mode = enabled) →
  فعال‌سازی dark mode → Response

نکات حرفه‌ای

نکات حرفه‌ای

۱. Key Naming Convention

از الگوی یکسان برای نام‌گذاری keys استفاده کنید:

code
object-type:id:field
مثال: user:123:email, cache:api:weather, rate:ip:192.168.1.1

۲. همیشه TTL تنظیم کنید

برای جلوگیری از پر شدن حافظه، همیشه TTL مناسب تنظیم کنید:

  • Cache: ۱ ساعت تا ۱ روز
  • Session: ۲۴ ساعت
  • Rate limit: ۱ دقیقه
  • Lock: ۳۰ ثانیه

۳. از Hash برای Object‌ها استفاده کنید

بجای serialize کردن JSON به string، از Hash استفاده کنید:

code
HSET user:123 name "علی" email "ali@example.com" age 30
HGET user:123 name  →  "علی"
HGETALL user:123   →  {name, email, age}

۴. INCR/DECR برای شمارنده

اتمیک و thread-safe هستند - مشکل race condition ندارند.

۵. NX Flag برای Lock

از SET key value NX EX 30 برای distributed lock استفاده کنید. NX یعنی فقط اگر key وجود ندارد.

۶. از SCAN بجای KEYS استفاده کنید

KEYS * سرور را block می‌کند. از SCAN با cursor استفاده کنید.

۷. Pipeline برای Batch

چندین command را با pipeline ارسال کنید تا round-trip کم شود.

۸. Maxmemory Policy

allkeys-lru: حذف least recently used (مناسب cache) volatile-lru: فقط keys با TTL حذف شوند noeviction: خطا بده وقتی حافظه پر شد

۹. Database Isolation

از دیتابیس‌های مختلف (0-15) برای جداسازی استفاده کنید:

  • DB 0: Application cache
  • DB 1: Sessions
  • DB 2: Rate limiting
  • DB 3: Queues

۱۰. JSON Data

برای ذخیره JSON، از JSON.stringify/parse استفاده کنید:

code
SET → JSON.stringify({name: "علی", orders: [1,2,3]})
GET → JSON.parse(result)

۱۱. Sorted Set برای Ranking

از ZADD و ZREVRANGE برای leaderboard و priority queue استفاده کنید.

۱۲. PUB/SUB برای Event-driven

از Pub/Sub برای ارتباط real-time بین workflow‌ها استفاده کنید. بسیار سریع‌تر از polling است.

۱۳. FLUSHDB با احتیاط

FLUSHDB همه keys را پاک می‌کند. فقط در development استفاده کنید.

۱۴. Redis Persistence

  • RDB: snapshot دوره‌ای (سریع‌تر، ممکن است چند ثانیه داده از دست برود)
  • AOF: ثبت هر operation (ایمن‌تر، فایل بزرگ‌تر)
  • بهترین: هر دو را فعال کنید

۱۵. Monitor Memory

redis-cli INFO memory را بررسی کنید. used_memory نباید از maxmemory بیشتر شود.

رفع مشکلات

رفع مشکلات رایج

❌ خطای "ECONNREFUSED" (اتصال رد شد)

علت: Redis server در دسترس نیست

راه‌حل

  • مطمئن شوید Redis در حال اجراست: redis-cli ping → باید PONG برگرداند
  • Host و Port را بررسی کنید
  • Firewall را بررسی کنید (پورت ۶۳۷۹)
  • در Docker: از نام container بجای localhost استفاده کنید

❌ خطای "NOAUTH" یا "ERR invalid password"

علت: رمز عبور نادرست یا تنظیم نشده

راه‌حل

  • رمز عبور را در credentials بررسی کنید
  • اگر Redis بدون رمز است، فیلد password را خالی بگذارید
  • در Redis 6+، username هم ممکن است لازم باشد

❌ خطای "WRONGTYPE Operation"

علت: نوع data structure نادرست (مثلاً GET روی List)

راه‌حل

  • نوع key را بررسی کنید: redis-cli TYPE mykey
  • برای String از GET/SET، برای List از LPUSH/LRANGE، و... استفاده کنید
  • اگر نوع را عوض کردید، ابتدا key قبلی را DEL کنید

❌ خطای "OOM command not allowed"

علت: حافظه Redis پر شده

راه‌حل

  • maxmemory و maxmemory-policy را تنظیم کنید
  • از allkeys-lru policy برای حذف خودکار قدیمی‌ها استفاده کنید
  • TTL تنظیم کنید تا keys خودکار منقضی شوند
  • حافظه سرور را افزایش دهید

❌ Key پیدا نمی‌شود (nil)

علت: Key وجود ندارد یا منقضی شده

راه‌حل

  • نام key را exact بررسی کنید (case-sensitive)
  • TTL ممکن است تمام شده باشد
  • Key ممکن است توسط workflow دیگری DEL شده باشد
  • دیتابیس صحیح (0-15) را انتخاب کنید

❌ Performance ضعیف

علت: استفاده نادرست از Redis

راه‌حل

  • از KEYS * در production استفاده نکنید (از SCAN استفاده کنید)
  • از pipeline برای batch operations استفاده کنید
  • مقادیر بسیار بزرگ (>1MB) را ذخیره نکنید
  • از MONITOR در production استفاده نکنید

❌ داده‌ها پس از restart از بین می‌رود

علت: persistence تنظیم نشده

راه‌حل

  • AOF را فعال کنید: appendonly yes
  • یا RDB snapshots: save 60 1000
  • در Docker: volume mount کنید (-v redis_data:/data)

❌ خطای "CROSSSLOT" (Redis Cluster)

علت: keys در slot‌های مختلف هستند

راه‌حل

  • از {hashtag} در نام keys استفاده کنید
  • مثال: user:{123}:name و user:{123}:email در یک slot هستند
اشتراک‌گذاری:

آیا این مستندات مفید بود؟