نصب Redis و RedisInsight با Docker

یکی از دیتا استورهای معروف و محبوبِ خانواده‌ی NoSQLها، Redis (مخفف Remote Dictionary Server) هستش که دیتا رو داخل رم نگه می‌داره؛ از ردیس میشه به عنوان دیتابیس، کش و message broker استفاده کرد؛ ردیس ساختمان داده‌های مختلفی مثل رشته، هش، لیست، set و ... رو پشتیانی می‌کنه (برای توضیحات بیشتر در مورد ساختمان داده‌های ردیس می‌تونید به این لینک مراجعه کنید) و داخل خودش قابلیت replication، ذخیره بر روی دیسک، تراکنش و تامین high availability رو داره.ما توی این مقاله قصد داریم یه ردیس به همراه RedisInsight که ابزار تحت وب برای مانیتورینگ و دسترسی به ردیس هست رو بیاریم بالا.اگه با ردیس آشنا نیستید و دوست دارید بیشتر باهاش آشنا بشید، توی این مقاله یه توییتر ساده رو با استفاده از PHP و ردیس پیاده می‌کنه؛ مقاله انقد خوب نوشته شده که لازم نیست PHP بلد باشید و بیشتر در مورد ردیس و تفکر توی ردیس صحبت می‌کنه.نصب Redis و RedisInsight با استفاده از داکرپیش‌نیازهافرض بر اینه که می‌خوایم Redis و RedisInsight رو روی اوبونتو سرور بریزیم و دایره لغتمون یه مقدار لینوکسی خواهد بود.از اونجایی که می‌خوایم Redis و RedisInsight رو با داکر نصب کنیم لازمه روی سیستممون داکر و داکر کامپوز نصب باشه؛ توی این مقاله گفتم چجوری میشه داکر و داکر کامپوز رو روی اوبونتو نصب کرد.همچنین چون می‌خوایم ایمیج‌ها رو از DockerHub دانلود کنیم لازمه از تحریم‌شکن استفاده کنیم که توی این مقاله فعالسازی شکن توی اوبونتو رو توضیح دادم.برای منابع سخت‌افزاری هم، چون ردیس به صورت single-thread کار می‌کنه نیاز به coreهای زیاد CPU نداریم؛ رم هم لازم نیست سرعت خیلی زیادی داشته و حجمش هم بر اساس نیازتون و میزان داده‌ای که می‌خواید داخلش نگه دارید تعیین میشه؛ فقط نکته مهم اینه که نباید از swap استفاده کنید.در کل ردیس خودش خیلی سبکه و بیشترین چیزی که می‌تونه روی پرفورمنسش اثر بذاره سرعت شبکه هستش؛ برای اطلاعات بیشتر در مورد سرعت و نکات پرفورمنسی می‌تونید به این مقاله یه نگاه بندازید.ایجاد فایل کانفیگ Redisاول از همه برا اینکه خیلی درگیر sudo و دسترسی و اینا نشیم این دستور رو بزنید تا دسترسی root‌ بگیریم:sudo suیه پوشه برای ردیسمون بسازیم:mkdir -p /opt/redis/config cd /opt/redisحالا داخل پوشه config یه فایل کانفیگ با نام redis.conf بسازیم:vim config/redis.conf و محتویاتشو این قرار بدیم:port 6379 requirepass my-redis-pass maxmemory 1gb maxmemory-policy allkeys-lru save &quot&quotبا این کانفیگ، ردیس به عنوان کش روی پورت ۶۳۷۹ می‌تونه با پسورد ناامن my-redis-pass حداکثر از ۱ گیگ رم استفاده کنه و وقتی ۱ گیگ حافظه پر میشه با استفاده از الگوریتم LRU، اطلاعاتی که کمتر از بقیه استفاده شدن رو پاک کنه. اینجا خیلی مفصل‌تر توضیح داده.از اونجایی که ردیس خیلی سریعه یه کاربر می‌تونه تا ۱ میلیون پسورد در ثانیه رو امتحان کنه؛ پس برای جلوگیری از حمله brute force از رمز عبور طولانی و غیرقابل حدس استفاده کنید. برای اطلاعات بیشتر در مورد امنیت ردیس به قسمت Security فایل کانفیگ مراجعه کنید.در صورتی که می‌خواید از ردیس به عنوان دیتابیس استفاده کنید (ینی اطلاعات روی دیسک ذخیره بشه) می‌تونید از این کانفیگ استفاده کنید:port 6379 requirepass my-redis-pass maxmemory 4gb maxmemory-policy noeviction save 3600 1 save 300 100 save 60 10000 # appendonly yes dir /data/توی کانفیگ بالا:میزان maxmemory رو برابر حداکثر مقدار دیتایی که می‌خواید نگه دارید (و البته میزان رم سیستمتون) قرار بدید (اینجا میزان مصرف رم رو تا حدودی گفته).سه خط saveای که نوشتیم به ترتیب به این معنیه که اطلاعاتو ذخیره کن رو دیسک اگه: بعد از ۳۶۰۰ ثانیه ۱ کلید تغییر کنه یا بعد از ۳۰۰ ثانیه ۱۰۰ کلید تغییر کنه یا بعد از ۶۰ ثانیه ۱۰۰۰۰ کلید تغییر کنه؛ بر اساس نیازتون می‌تونید تغییرشون بدید.با سیاستی که برای ذخیره روی دیسک نوشتیم، فرض کنید ظرف ۳۰ ثانیه ۵۰۰۰ کلید تغییر کنه و ردیس به صورت ناگهانی استاپ بشه (مثلا برق بره)؛ ۵۰۰۰تا تغییرمون هم از بین میره! اگر براتون قابل قبول نیست اون خط appendonly رو از کامنت دربیارید (اینکار البته یه سری معایب دیگه داره که می‌تونید اینجا ببینید).برای توضیحات بیشتر و عمیق‌تر میشه یه نگاهی به این صفحه بندازید.ایجاد پوشه و تنظیم دسترسی برای RedisInsightبا فرض اینکه هنوز داخل پوشه opt/redis هستیم، یه پوشه برای RedisInsight می‌سازیم و دسترسیشو میزون می‌کنیم:mkdir -p insight/data chown -R 1001 insight/dataایجاد فایل docker-compose.yamlیه فایل docker-compose.yaml ایجاد کنیم:vim docker-compose.yamlو محتویاتشو این قرار بدیم:version: &quot3.9&quot services: redis: container_name: redis image: redis:6.2 command: redis-server /usr/local/etc/redis/redis.conf restart: unless-stopped volumes: - /opt/redis/data:/data - /opt/redis/config:/usr/local/etc/redis ports: - &quot6379:6379&quot redisinsight: container_name: redisinsight image: redislabs/redisinsight:1.11.1 restart: unless-stopped volumes: - /opt/redis/insight/data:/db ports: - &quot8001:8001&quotاجرای کانتینرهابرای اجرای کانتینرهام کافیه این دستور رو بزنیم:docker compose up -dکه داکر شروع می‌کنه ایمیج‌ها رو دانلود می‌کنه و بعد از دانلود، کانتینرها رو اجرا می‌کنه و بعد از چند ثانیه اون‌ها قابل استفاده خواهند بود.الان ردیس روی پورت ۶۳۷۹ با پسورد my-redis-pass قابل استفاده خواهد بود؛ در ادامه یه مقدار در مورد تنظیم و استفاده از RedisInight صحبت می‌کنیم.تنظیم RedisInsightبعد از اینکه که کانتینرها رو اجرا کردید، اگه مشکل خاصی وجود نداشته باشه باید روی پورت ۸۰۰۱ سرورتون صفحه RedisInsight رو ببینید:http://IP_OR_DOMAIN:8001در زمان نوشتن این مقاله نسخه ۲ RedisInsight هنوز به صورت پایدار عرضه نشده؛‌ در صورت عرضه، سعی می‌کنم مقاله رو آپدیت کنم.حالا روی "I already have a database" کلیک کنید و بعد هم گزینه "Connect to a Redis Database Using hostname and port" رو انتخاب کنید.مشخصات ردیس رو به این شکل وارد کنید:Host: redis Port: 6379 Name: my-redis Username: default Password: my-redis-passحالا ردیسمون که اسمشو گذاشتیم my-redis به لیست دیتابیس‌ها اضافه میشه و با کلیک روی اون بهش وصل میشیم و می‌تونیم از مانیتورینگ و سایر امکانات RedisInsight استفاده کنیم:ردیسمونتمام!برای اطلاعات بیشتر در مورد RedisInsight می‌تونید به صفحه خودش مراجعه کنید.در صورتی که سوالی داشتید در قسمت نظرات یا ایمیل mkay1375@gmail.com در خدمت هستم.