یکی از دیتا استورهای معروف و محبوبِ خانوادهی NoSQLها، Redis (مخفف Remote Dictionary Server) هستش که دیتا رو داخل رم نگه میداره؛ از ردیس میشه به عنوان دیتابیس، کش و message broker استفاده کرد؛ ردیس ساختمان دادههای مختلفی مثل رشته، هش، لیست، set و ... رو پشتیانی میکنه (برای توضیحات بیشتر در مورد ساختمان دادههای ردیس میتونید به این لینک مراجعه کنید) و داخل خودش قابلیت replication، ذخیره بر روی دیسک، تراکنش و تامین high availability رو داره.
ما توی این مقاله قصد داریم یه ردیس به همراه RedisInsight که ابزار تحت وب برای مانیتورینگ و دسترسی به ردیس هست رو بیاریم بالا.
اگه با ردیس آشنا نیستید و دوست دارید بیشتر باهاش آشنا بشید، توی این مقاله یه توییتر ساده رو با استفاده از PHP و ردیس پیاده میکنه؛ مقاله انقد خوب نوشته شده که لازم نیست PHP بلد باشید و بیشتر در مورد ردیس و تفکر توی ردیس صحبت میکنه.
فرض بر اینه که میخوایم Redis و RedisInsight رو روی اوبونتو سرور بریزیم و دایره لغتمون یه مقدار لینوکسی خواهد بود.
از اونجایی که میخوایم Redis و RedisInsight رو با داکر نصب کنیم لازمه روی سیستممون داکر و داکر کامپوز نصب باشه؛ توی این مقاله گفتم چجوری میشه داکر و داکر کامپوز رو روی اوبونتو نصب کرد.
همچنین چون میخوایم ایمیجها رو از DockerHub دانلود کنیم لازمه از تحریمشکن استفاده کنیم که توی این مقاله فعالسازی شکن توی اوبونتو رو توضیح دادم.
برای منابع سختافزاری هم، چون ردیس به صورت single-thread کار میکنه نیاز به coreهای زیاد CPU نداریم؛ رم هم لازم نیست سرعت خیلی زیادی داشته و حجمش هم بر اساس نیازتون و میزان دادهای که میخواید داخلش نگه دارید تعیین میشه؛ فقط نکته مهم اینه که نباید از swap استفاده کنید.
در کل ردیس خودش خیلی سبکه و بیشترین چیزی که میتونه روی پرفورمنسش اثر بذاره سرعت شبکه هستش؛ برای اطلاعات بیشتر در مورد سرعت و نکات پرفورمنسی میتونید به این مقاله یه نگاه بندازید.
اول از همه برا اینکه خیلی درگیر 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 ""
با این کانفیگ، ردیس به عنوان کش روی پورت ۶۳۷۹ میتونه با پسورد ناامن 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/
توی کانفیگ بالا:
با فرض اینکه هنوز داخل پوشه opt/redis هستیم، یه پوشه برای RedisInsight میسازیم و دسترسیشو میزون میکنیم:
mkdir -p insight/data chown -R 1001 insight/data
یه فایل docker-compose.yaml ایجاد کنیم:
vim docker-compose.yaml
و محتویاتشو این قرار بدیم:
version: "3.9" 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: - "6379:6379" redisinsight: container_name: redisinsight image: redislabs/redisinsight:1.11.1 restart: unless-stopped volumes: - /opt/redis/insight/data:/db ports: - "8001:8001"
برای اجرای کانتینرهام کافیه این دستور رو بزنیم:
docker compose up -d
که داکر شروع میکنه ایمیجها رو دانلود میکنه و بعد از دانلود، کانتینرها رو اجرا میکنه و بعد از چند ثانیه اونها قابل استفاده خواهند بود.
الان ردیس روی پورت ۶۳۷۹ با پسورد my-redis-pass قابل استفاده خواهد بود؛ در ادامه یه مقدار در مورد تنظیم و استفاده از RedisInight صحبت میکنیم.
بعد از اینکه که کانتینرها رو اجرا کردید، اگه مشکل خاصی وجود نداشته باشه باید روی پورت ۸۰۰۱ سرورتون صفحه RedisInsight رو ببینید:
در زمان نوشتن این مقاله نسخه ۲ 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 در خدمت هستم.