اگر از 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 برای مانیتورینگ
-
ابزار رسمی Redis برای مشاهده دادهها و مدیریت پرفورمنس.
-
دانلود از redis.com/redis-enterprise/redis-insight.
۲. فعالسازی 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 گزینههای مناسبی هستند.
-