راهنمای کامل راه‌اندازی Redis با Docker و یکپارچه‌سازی آن در برنامه‌های .NET

4/11/2025 MVC Core
455

اگر از Redis برای کشینگ، مدیریت session یا پردازش داده‌های Real-time در برنامه‌های .NET خود استفاده می‌کنید، Docker ابزاری عالی برای استقرار سریع و ایزوله‌سازی Redis است. اما تنظیم نادرست آن می‌تواند منجر به خطاهای رایجی مانند NOAUTH Authentication required یا Connection Timeout شود. در این مقاله، قدم به قدم نحوه راه‌اندازی Redis با Docker و اتصال ایمن آن به برنامه‌های .NET را آموزش می‌دهیم.

فصل ۱: راه‌اندازی Redis با Docker

مرحله ۱: ایجاد فایل redis.conf

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

# redis.conf
bind 0.0.0.0         # اجازه اتصال از هر IP
protected-mode no    # غیرفعال کردن حالت حفاظت‌شده
requirepass MySecurePassword123 # تنظیم پسورد

مرحله ۲: اجرای کانتینر Redis

با دستور زیر یک کانتینر Redis با تنظیمات بالا ایجاد کنید:

docker run -d   --name redis   -p 6379:6379   -v /path/to/redis.conf:/usr/local/etc/redis/redis.conf   redis:latest   redis-server /usr/local/etc/redis/redis.conf

مرحله ۳: تست اتصال به Redis

از طریق redis-cli اتصال و احراز هویت را بررسی کنید:

redis-cli -h localhost -p 6379
AUTH MySecurePassword123
PING # پاسخ باید "PONG" باشد!

فصل ۲: یکپارچه‌سازی Redis با برنامه‌های .NET

مرحله ۱: تنظیم Connection String

در appsettings.json برنامه .NET، اطلاعات اتصال به Redis را اضافه کنید:

"ConnectionStrings": {
  "Redis": "localhost:6379,password=MySecurePassword123"
}

مرحله ۲: پیکربندی سرویس Redis در برنامه
در فایل Startup.cs یا Program.cs، سرویس کش Redis را فعال کنید:

using Microsoft.Extensions.Caching.StackExchangeRedis;

builder.Services.AddStackExchangeRedisCache(options => {
    options.Configuration = builder.Configuration.GetConnectionString("Redis");
});

مرحله ۳: استفاده از Redis در سرویس‌ها

مثال ساده ذخیره و بازیابی داده:

public class VisitService
{
    private readonly IDistributedCache _cache;
    
    public VisitService(IDistributedCache cache)
    {
        _cache = cache;
    }

    public async Task TrackVisit(string userId)
    {
        await _cache.SetStringAsync(userId, DateTime.UtcNow.ToString());
    }
}

فصل ۳: رفع خطاهای رایج

۱. خطای NOAUTH Authentication required

  • علت: پسورد Redis در Connection String برنامه .NET وارد نشده است.

  • راه حل:

    "Redis": "localhost:6379,password=MySecurePassword123"

    ۲. خطای Timeout یا Connection Refused

    • علت:

      • پورت 6379 روی سرور باز نیست.

      • Docker از اتصال خارجی جلوگیری می‌کند.

    • راه حل:

      • فایروال سرور را بررسی کنید:

        sudo ufw allow 6379/tcp

     

    • از bind 0.0.0.0 در redis.conf اطمینان حاصل کنید.

۳. خطای Port is already allocated

  • علت: پورت ۶۳۷۹ توسط یک کانتینر یا برنامه دیگر استفاده می‌شود.

  • راه حل:

    docker ps -a # پیدا کردن کانتینرهای قدیمی
    docker stop redis-old && docker rm redis-old

     

    فصل ۴: نکات پیشرفته

    ۱. استفاده از RedisInsight برای مانیتورینگ

    ۲. فعالسازی TLS/SSL

    برای امنیت بیشتر، ارتباطات را رمزگذاری کنید:

    "Redis": "localhost:6379,password=MySecurePassword123,ssl=true"

    ۳. تنظیمات Cluster برای Scalability

    • اجرای چندین کانتینر Redis با نقش‌های Master/Replica.

    • مثال:

      docker run -d --name redis-master -p 6379:6379 redis:latest
      docker run -d --name redis-replica -p 6380:6379 redis:latest --replicaof redis-master 6379


    جمع‌بندی

    با دنبال کردن این راهنما، می‌توانید Redis را با Docker به صورت ایمن و پایدار راه‌اندازی کرده و از خطاهای رایج جلوگیری کنید. اگر به دنبال جزئیات بیشتر هستید، پیشنهاد می‌کنم مستندات رسمی Docker و Redis را مطالعه کنید.

    سوالات متداول (FAQ)

    • چگونه پسورد Redis را تغییر دهم؟
      فایل redis.conf را ویرایش و کانتینر را ریاستارت کنید.

    • آیا می‌توانم از Redis روی Cloud استفاده کنم؟
      بله! سرویس‌هایی مثل AWS ElastiCache یا Azure Cache for Redis گزینه‌های مناسبی هستند.