ردیس چیست و انواع آن کدامند؟

ردیس چیست و انواع آن کدامند؟

نوشته شده توسط: نگین فاتحی
تاریخ انتشار: ۲۴ شهریور ۱۴۰۳
آخرین بروزرسانی: ۲۴ شهریور ۱۴۰۳
زمان مطالعه: 22 دقیقه
۱
(۱)

ردیس یک پایگاه داده NoSQL است که به‌شکل منبع باز ارائه شده و نقش واسط پیام بین سرور و کلاینت را ایفا می‌کند. علاوه‌بر این، ردیس درون حافظه سرور قرار گرفته و می‌تواند به‌عنوان حافظه پنهان (Cache) برای سرعت بخشیدن به عملیات تبادل داده هم استفاده شود. این پایگاه داده در ذخیره‌سازی (Caching)، مدیریت Sessionهای کاربران و سیستم‌های بلادرنگ (Real-time) کاربرد دارد.

در این مقاله جزئیات ردیس را با یکدیگر بررسی کرده و از تفاوت های این پایگاه داده با دیگر پایگاه داده‌ها صحبت خواهیم کرد. همچنین می‌توانید نصب و راه‌اندازی ردیس، عملیات پایه در این پایگاه داده و مباحث مهم دیگر را بخوانید.

ردیس چیست؟

Redis مخفف Remote Dictionary Server است که اطلاعات را به‌صورت کلید-مقدار (Key/Value) در پایگاه داده ذخیره می‌کند. کلید شناسه‌ای منحصربه‌فرد است که برای دسترسی به مقدار خاصی در Redis استفاده می‌شود. این اجزا به‌عنوان مکانیزم جست‌وجو برای بازیابی مقادیر مرتبط عمل می‌کنند. مقدار داده‌ای است که در یک کلید ذخیره می‌شود. به‌طور مثال، City=Tehran یک داده در ردیس است که City کلید و Tehran مقدار آن است. 

این دیتابیس در RAM سرور نصب و به‌عنوان حافظه پنهان (Cache) برنامه یا وب‌سایت استفاده می‌شود. همچنین Redis داده‌ها را به‌جای ذخیره کردن در حافظه‌های جانبی – مانند HDD یا SSD – در RAM نگه می‌دارد. هدف از این کار، افزایش سرعت در پاسخ‌دهی به درخواست‌ها و قابلیت اطمینان است.

دوره آموزش مهندسی داده [Data Engineering] نیک آموز

ردیس چگونه سرعت سرور را افزایش می‌دهد؟

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

یکی از راه‌های بهبود عملکرد در این شرایط، ذخیره و دریافت داده‌ها از حافظه RAM سرور است. Redis هم برای همین هدف ساخته شده است و مزایای متعددی ارائه می‌دهد که در بخش بعدی تشریح خواهیم کرد.

مزایا و معایب ردیس

Redis چند مزیت کلیدی را در کنار تعدادی معایب دارد که در ادامه هرکدام را نام خواهیم برد.

مزایای ردیس 

  • سرعت بالا: Redis یک پایگاه داده مستقر در RAM است؛ یعنی داده‌ها را به‌جای نگهداری در حافظه‌های جانبی، در RAM ذخیره می‌کند. این روند اجازه می‌دهد تا عملیات خواندن و نوشتن در سرور بسیار سریع انجام شوند. همچنین این مزیت، ردیس را برای برنامه‌هایی که نیاز به دسترسی به داده‌ها با حداقل تاخیر دارند، به یک دیتابیس مناسب تبدیل می‌کند. 
  • پشتیبانی گسترده از انواع داده: Redis از داده‌های زیادی پشتیبانی می‌کند؛ مانند رشته‌ها، هش‌ها، لیست‌ها، مجموعه‌ها و غیره. 
  • گزینه‌های متنوع برای استقرار: به‌طور معمول، شرکت‌ها از استراتژی‌های استقرار سرور روی فضای ابری یا پلتفرم‌های ترکیبی استفاده می‌کنند. Redis Enterprise را می‌توان روی هر پلتفرم ابری، معماری‌های چند ابری یا ترکیبی مستقر کرد. 
  • کنترل توابع با جاوا اسکریپت: با استفاده از جاوا اسکریپت، می‌توانید توابع سمت سرور را در ردیس برنامه‌ریزی کنید. این امکان فرآیند پردازش را در Redis Enterprise به‌شکل رویدادمحور (Event-driven) انجام می‌دهد.
  • پشتیبانی از Replication: ردیس از معماری Master-slave استفاده می‌کند؛ معماری‌ ممتازی که در آن، داده‌ها به‌طور غیرهمزمان (Asynchronously) از یک نمونه اصلی کپی‌ شده و به یک یا چند نمونه کوچک دیگر تقسیم می‌شوند. این فرآیند برای افزایش دسترسی و مقیاس‌پذیری انجام می‌شود.

معایب ردیس

  • محدودیت حافظه: ردیس یک پایگاه داده درون RAM است؛ به این معنی که همه داده‌ها باید در RAM قرار بگیرند. این موضوع می‌تواند یک محدودیت برای مجموعه داده‌هایی باشد که بیش‌ازحد بزرگ هستند. 
  • عدم پشتیبانی از کوئری‌: در Redis امکان نوشتن کوئری‌های دیتابیس مانند Select، Where و From وجود ندارد. همه الگوهای دسترسی به داده‌ها باید توسط کدهای برنامه انجام و مدیریت شوند. این موضوع انعطاف‌پذیری ردیس را کاهش می‌دهد.
  • گزینه‌های محدود برای ماندگاری داده‌ها: این پایگاه داده از RDB و AOF برای ماندگاری داده‌ها پشتیبانی می‌کند. این روش‌ها به اندازه مکانیزم‌های ثبت و بازیابی تراکنش‌های موجود در پایگاه‌های داده سنتی قوی نیستند.
  • مدل امنیتی ضعیف: ردیس دارای یک مدل امنیتی ابتدایی است. این دیتابیس فاقد کنترل دقیق و قابلیت‌های مدیریت نقش‌ها است؛ درحالی‌که پایگاه‌های داده رابطه‌ای مانند SQL، چنین امکانی را فراهم می‌کنند.
  • Single-Threaded: یک نمونه Redis تنها روی یک هسته CPU اجرا می‌شود. برای مقیاس‌بندی گسترده‌تر، باید داده‌ها را در چندین نمونه Redis تقسیم کرد؛ شرایطی که پیچیدگی را افزایش می‌دهد.
  • عملیات چند کلیدی محدود: در یک خوشه Redis، عملیات چند کلیدی تنها زمانی پشتیبانی می‌شود که همه کلیدهای درگیر متعلق به یک اسلات هش باشند. عملیات متقاطع در این زمینه با شکست مواجه خواهد شد.
  • سربار حافظه: این دیتابیس به‌دلیل ماهیت درون حافظه‌ای و ساختار داده‌ای، به حافظه بیشتری نسبت‌به میزان داده‌ها نیاز دارد. این ضعف می‌تواند راه‌اندازی و نگهداری ردیس را برای مجموعه داده‌های بزرگ، با مشکل و افزایش هزینه مواجه کند.
  • نامناسب برای داده‌های پیچیده: این دیتابیس برای دسترسی ساده به داده‌ها عملکرد سریعی دارد؛ اما برای مدل‌های داده‌ای پیچیده یا پایگاه‌هایی که نیاز به کوئری نوشتن دارند، مناسب نیست.

تفاوت‌ های ردیس با دیگر پایگاه‌ های داده

ردیس با دیگر پایگاه‌های داده تفاوت‌های ظریفی دارد که در این بخش به آن‌ها اشاره خواهیم کرد.

ردیس در مقابل MySQL

ردیس با MySQL از نظر مدل داده، پشتیبانی از روش‌های تراکنش و عملکرد تفاوت‌هایی دارد که در ادامه آن‌ها را تشریح می‌کنیم.

  • مدل داده: Redis داده‌های مختلف را به‌صورت جفت‌های کلید-مقدار ذخیره می‌کند؛ درحالی‌که MySQL داده‌ها را در جدول‌های ساخته‌شده از ردیف و ستون نگه می‌دارد.
  • پشتیبانی از شیوه‌های تراکنش: ردیس از خصوصیات ACID به‌طور کامل پشتیبانی نمی‌کند؛ درحالی‌که MySQL پشتیبانی کاملی را از تراکنش‌های ACID ارائه می‌دهد تا ثبات داده‌ها را تضمین کند.
  • عملکرد: ردیس عملیات خواندن و نوشتن را بسیار سریع انجام می‌دهد. ویژگی موثری که آن را برای ذخیره‌ و پردازش داده‌ها در زمان واقعی مناسب می‌کند؛ اما MySQL داده‌ها را روی دیسک ذخیره می‌کند که منجربه عملکرد کندتر می‌شود.

ردیس در مقابل Memcached

Redis و Memcached هر دو منبع‌باز هستند که ذخیره‌سازی داده‌ها را درون رم انجام می‌دهند؛ اما تفاوت‌های خاصی در برخی پارامترها با یکدیگر دارند که در ادامه به هرکدام اشاره کرده‌ایم.

  • موارد استفاده: Memcached اغلب برای برنامه‌های کاربردی ساده که به منابع حافظه کمتری نیاز دارند، انتخاب می‌شود؛ اما در ذخیره داده‌ها به‌شکل سریالی محدود است. در این شرایط، Redis انتخاب بهتری است؛ زیرا از ساختارهای داده متنوع و قدرت‌مندی پشتیبانی می‌کند. 
  • توانایی در مدیریت داده‌های بزرگ: هنگام کار با مجموعه داده‌های بزرگ، ردیس توانایی بیشتری برای تنظیم دقیق محتویات کش و حفظ کارایی بیشتر در برنامه‌های خاص دارد؛ اما دیتابیس Memcached فاقد چنین ویژگی کارآمدی است.

ردیس در مقابل MongoDB

Redis و MongoDB هردو از نوع دیتابیس NoSQL هستند؛ اما تفاوت‌های ظریفی دارند که در ادامه خواهید خواند.

  • مدل داده: ردیس یک پایگاه داده مستقر در رم است؛ اما دیتابیس MongoDB به‌شکل یک Document روی دیسک‌های خارجی ذخیره می‌شود. اگرچه هر دو راه‌حلی برای اهداف مختلف هستند، اما اغلب با یکدیگر برای به حداکثر رساندن سرعت و کارایی یک پایگاه داده NoSQL استفاده می‌شوند. 
  • هم‌پوشانی در عملکرد: Redis به‌دلیل توانایی Caching می‌تواند داده‌های مورد نیاز را با سرعت بسیار بالایی پیدا کند. درنتیجه می‌توان از آن به‌عنوان یک بافر برای افزایش کارآمدی MongoDB استفاده کرد؛ جایی‌که MongoDB می‌تواند به‌صورت Real-time مدیریت فرکانس‌های بزرگ‌تر برای به‌روزرسانی‌های اسناد را فراهم کند. 
  • افزایش قدرت مدیریت روی دیتابیس: با توانایی MongoDB برای ذخیره مقادیر زیادی از داده‌ها و پردازش سریع آن‌ها توسط ردیس، می‌توان مدیریت قدرت‌مندی روی دیتابیس‌های مختلف داشت.

 ۴ نوع متداول از معماری ردیس 

در ردیس دو بخش اصلی وجود دارد که در تمام معماری‌ها یکسان است:

  1. سرور ردیس: سیستم قدرت‌مندی که پایگاه داده روی آن نصب شده و به درخواست‌ها پاسخ می‌دهد.
  2. کلاینت ردیس: سیستمی که تقاضای صفحه سایت یا بخش‌های اپلیکیشن را می‌دهد و منتظر مشاهده آن می‌ماند.

انواع روش‌ های استفاده از ردیس بسته به کاربرد و مقیاس سایت و برنامه، مدل‌های مختلفی را شامل می‌شود که در ادامه آن‌ها را معرفی خواهیم کرد. 

  1. Single Redis Instance

این معماری ساده‌ترین روش استقرار ردیس است. در این موقعیت، تنها یک سرور درحال اجرا است که تمام عملیات ذخیره‌سازی و خواندن/نوشتن داده‌ها را مدیریت می‌کند. 

 

Single Redis Instance

 

کاربردها: 

این معماری برای اپلیکیشن‌ها و موقعیت‌هایی که سادگی و سرعت در آن‌ها اولویت است، بهترین گزینه خواهد بود؛ مانند:

  • ذخیره Sessionهای کاربر در برنامه‌های تحت وب (Web Applications)؛
  • کش کردن داده‌هایی که به‌طور متداول استفاده می‌شوند؛
  • کاهش بار اضافی روی سرور؛ 
  • تجزیه‌و‌تحلیل داده‌ها به‌صورت Real-time.

معایب:  

  • مقیاس‌پذیری محدود به‌دلیل عدم وجود منابع کافی (CPU و RAM)
  • تحمل پایین خطا ناشی از خاموش شدن یا از کار افتادن سرور
  • عدم امکان مدیریت حجم زیادی از داده‌ها 
  • کاهش عملکرد و سرعت کلی سیستم
  • محدودیت حافظه سرور در ذخیره حجم زیادی از داده
  1. Redis HA

یکی دیگر از محبوب‌ترین معماری های ردیس، نوع HA (High Availability) است. در این معماری، یک سرور به‌عنوان نمونه اصلی و سروری دیگر به‌عنوان نمونه ثانویه راه‌اندازی می‌شود. همیشه این دو سرور با قابلیت Replication هم‌گام می‌شوند. نمونه‌های ثانویه می‌توانند یک یا چند سرور باشند که در مقیاس‌های بزرگ، به خواندن داده از دیتابیس کمک می‌کنند. همچنین این معماری در زمان‌هایی که سرور اصلی از دسترس خارج می‌شود، Failover را فراهم می‌کند.

 

Redis HA

 

کاربردها:

  • پلتفرم‌هایی که نیاز به اجرای بدون توقف دارند؛
  • شرایطی که باید دسترسی به داده‌ها پایدار و همیشگی باشد؛
  • موقعیت‌هایی که نیاز به بازیابی مطمئن و سریع داده‌ها، حتی در زمان از کار افتادن سرور دارند؛
  • شرایطی که نباید هیچ پیامی در طول رویدادهای Failover از بین بروند؛
  • سرورهایی که نیاز به تقسیم بار خواندن و نوشتن روی یک سرور دیگر دارند.

معایب:

  • پیچیدگی بیشتر در راه‌اندازی نسبت‌به Single Redis Instance
  • احتمال تاخیر در تحویل داده با توجه به Replication و  از دسترس خارج شدن سرور اصلی
  • احتمال بروز تاخیر در ارائه داده به کلاینت به‌دلیل Failover خودکار و ازسرگیری فرآیند انتخاب سرور اصلی
  1. Redis Sentinel

این معماری با نام «ردیس نگهبان» هم شناخته می‌شود و به مجموعه‌ای از سیستم‌های توزیع‌شده اشاره دارد. در این روش، یک سرور به‌عنوان سرور اصلی و سایر سرورها، نمونه‌های ثانویه هستند که هرکدام نقش نگهبان را به خود می‌گیرند. هدف از به‌کارگیری چند سرور، هماهنگی صحیح عملیات و دسترسی‌پذیری ثابت به سرورها است. 

 

Redis Sentinel

 

در این مدل، هر سرور وظایف زیر را انجام می‌دهد:

  • مانیتورینگ: اطمینان از این‌که سرورهای اصلی و ثانوی مطابق انتظار کار می‌کنند؛
  • اعلان: به تمام مدیران سیستم در مورد رویدادهایی که در سرورهای Redis رخ می‌دهند، توسط سایر سیستم‌ها اطلاع داده می‌شود؛
  • مدیریت در حین Failover: گره‌های نگهبان می‌توانند فرآیند پردازش را در حین Failover سرور اولیه شروع کنند. Failover در این‌جا به‌معنی خارج شدن سرور اصلی از دسترس یا پاسخ ندادن آن در مدت زمانی مشخص است. 

کاربردها:

  • برنامه‌های حیاتی و مهم با نیاز همیشگی به دسترسی پایدار و دریافت داده‌ها به‌صورت بلادرنگ
  • فروشگاه‌های اینترنتی
  • پلتفرم‌های بازی و امور مالی
  • شبکه‌های حساس با نیاز به ردیابی میزان استفاده از حافظه، تاخیر در پاسخ‌دهی و سایر معیارهای مهم در زمینه پایداری
  • پلتفرم‌های آموزش مدل‌های هوش مصنوعی و یادگیری ماشین
  • شبکه‌هایی با نیاز فوری به سوئیچ سریع و بدون تاخیر به سرور اصلی
  • شبکه‌های نیازمند به مقاومت در برابر Failover

معایب:

  • هزینه‌های زیاد برای راه‌اندازی و پیکربندی سرورها
  • پتانسیل از دست دادن داده‌ها به‌دلیل عدم کپی اطلاعات سرور اصلی روی گره‌های نگهبان
  • لزوم استقرار سرورها در یک منطقه
  • ایجاد تاخیر در پاسخ‌دهی و پیچیدگی Failover در صورت راه‌اندازی در مناطق جغرافیایی دور از هم
  • نیاز به ابزارهای خارجی برای پشتیبان‌گیری 
  • مصرف منابع سخت‌افزاری زیاد
  • ارتقا و نگهداری پیچیده
  1. Redis Cluster

این معماری به مدل “Redis Cluster Master-Slave” هم مشهور است و نوع پیشرفته در استقرار دیتابیس ردیس شناخته می‎شود. در این معماری که به‌صورت خوشه‌ای پیاده‌سازی می‌شود، داده‌های ذخیره‌شده را در چند سیستم پخش می‌کنیم که به فرآیند “Sharding” معروف است. بنابراین هرکدام از این سرورها در خوشه، بخشی از کل داده در نظر گرفته می‌شوند.

 

Redis Cluster

 

کاربردها:

  • شبکه‌های نیازمند به مقیاس‌پذیری افقی و افزایش سرور در گذر زمان
  • پلتفرم‌هایی با نیاز بالا به مدیریت درخواست‌های هم‌زمان کلاینت‌ها
  • شبکه‌هایی با نیاز به دسترسی‌پذیری و پایداری بالا

معایب:

  • فرآیند پیچیده در تعامل با سیستم کلاینت
  • محدودیت در مدیریت کلیدها و انجام عملیات روی آن‌ها
  • فرآیند زمان‌بر مدیریت هر خوشه

۵ ویژگی‌ و قابلیت‌ ردیس 

Redis طیف وسیعی از ویژگی‌ها و قابلیت‌هایی را دربرمی‌گیرد که همه آن‌ها به یک هدف ختم می‌شوند: ذخیره‌سازی اطلاعات درون‌ حافظه‌ رم و تضمین پایداری و سرعت بالا.

در ادامه به مهم‌ترین ویژگی ها و قابلیت های ردیس اشاره خواهیم کرد.

  1. ساختار های متنوع برای داده‌ ها

این دیتابیس قدرت‌مند از انواع ساختارهای داده که در ادامه آن‌ها را لیست کرده‌ایم، پشتیبانی می‌کند:

  • رشته‌ها
  • هش‌ها
  • لیست‌ها
  • مجموعه‌ها
  • مجموعه‌های مرتب‌شده
  • بیت‌مپ‌ها
  • هایپرلاگ‌ها
  • شاخص‌های جغرافیایی
  • استریم‌ها
  1. سازگاری بالا با لینوکس

Redis با ANSI C نوشته شده است و روی اکثر سیستم‌های Linux و Mac OS X بدون وابستگی به ابزارهای خارجی کار می‌کند. وب‌سایت رسمی این دیتابیس توصیه کرده که سرورهای ردیس را با لینوکس مستقر کنید.

  1. کامیونیتی عظیم و حمایت متخصصان از تازه‌ واردان

ردیس یک کامیونیتی جامع دارد که در آن افراد تازه‌وارد سوالات خود را مطرح و متخصصان نظرات‌شان را بیان می‌کنند. اگر یک علاقه‌مند به این دیتابیس و تازه‌وارد به این حوزه هستید، می‌توانید در این اجتماع عضو شده و چالش‌های خود را با مشارکت سایر متخصصان حل کنید.

  1. پشتیبانی از ابزار های ادغام‌ سازی

ابزارها و کتابخانه‌ های مرتبط با ردیس شامل ابزارهای یکپارچه‌سازی داده‌ها، کتاب‌خانه‌ها و چهارچوب‌های متداول هستند که در ادامه هرکدام را لیست کرده‌ایم:

  • کتاب‌خانه‌های Client API برای ارتباط با سرور ردیس 
  • استفاده از زبان‌های Python، C#/.NET، Node.js، Java و Go برای ارتباط با سرور
  • Data Integration برای یکپارچه‌سازی داده‌های Redis
  • کتاب‌خانه وکتور برای پایتون 
  • استفاده از Redis Cloud به‌عنوان پایگاه دانش عامل‌های هوش مصنوعی در Amazon Bedrock
  • Object-mapping برای .NET
  • Spring Data Redis برای جاوا
  1. ذخیره اطلاعات به‌ شکل بردار

ردیس یک پایگاه داده برداری است که بهترین انتخاب برای توسعه مدل‌های هوش مصنوعی محسوب می‌شود. این ویژگی مدیریت داده‌های زیاد در مدل‌ها را سرعت می‌بخشد و زمان پاسخ‌دهی هوش مصنوعی را به حداکثر می‌رساند.

انواع داده ها در ردیس؛ ۱۰ نوع پرطرفدار

در Redis مجموعه‌ای از انواع داده‌های بومی وجود دارد که به شما کمک می‌کنند طیف گسترده‌ای از مشکلات را حل کنید؛ از کش کردن گرفته تا صف کردن وظایف و پردازش رویدادها. انتخاب بهترین نوع داده با پرسیدن سه سوال به نتیجه مناسب می‌رسد:

  1. چه نوع داده‌ای را ذخیره می‌کنید؟ (جفت‌های ساده‌ای از کلید-مقدار، لیست‌ها، مجموعه اعداد)
  2. چه عملیاتی را انجام خواهید داد؟ (عملیات push/pop برای لیست‌ها، افزودن/حذف برای مجموعه‌ها)
  3. الزامات عملکرد شما چیست؟ (کارایی حافظه یا سرعت دسترسی)

به‌طور معمول، توسعه‌دهنده برنامه یا کارشناس دیتابیس مسئول پاسخ به این سوال‌ها و انتخاب بهترین نوع داده خواهند بود. 

در ادامه هفت نوع داده در ردیس را لیست کرده و توضیح خواهیم داد. 

  1. رشته 

رشته‌ها از ابتدایی‌ترین انواع داده در ردیس هستند که دنباله‌ای از بایت‌ها را ذخیره می‌کنند. این نوع داده می‌تواند متن، شی و آرایه‌های باینری را که حداکثر ۵۱۲ مگابایت حجم دارند، ذخیره کند. 

کاربردها

  • تبدیل یک شی پیچیده به رشته (Mapping) 
  • ذخیره کدهای HTML 
  • ذخیره صفحات مختلف از وب‌سایت

سینتکس تعریف و فراخوانی رشته در ردیس به شکل زیر است:

 

> SET bike:1 Deimos
    OK
    > GET bike:1
    "Deimos"

 

SET و GET دستورات تعریف و فراخوانی رشته، کلید “bike:1” و مقدار آن “Deimos” است.

نکته اول: اگر کلید از قبل وجود داشته باشد، دستور SET مقدار جدید را با مقدار قبلی جایگزین می‌کند؛ حتی اگر در کلید یک مقدار غیر رشته‌ای داشته باشیم. 

نکته دوم: مقادیر می‌توانند رشته‌ها (از جمله داده‌های باینری) و از هر نوعی باشند؛ به‌عنوان مثال می توانید تصویر jpeg را در یک مقدار ذخیره کنید. 

نکته سوم: یک مقدار نمی‌تواند بزرگ‌تر از ۵۱۲ مگابایت باشد.

  1. لیست 

Redis Lists لیستی از مقادیر رشته‌ای و به‌هم‌پیوسته هستند. 

کاربردها:

  • پشته‌ها (Stacks) و صف‌ها (Queues) 
  • ساخت مدیریت صف برای سیستم‌های فعال در پس‌زمینه

سینتکس‌:

 

> LPUSH bikes:repairs bike:1
(integer) 1
> LPUSH bikes:repairs bike:2
(integer) 2
> RPOP bikes:repairs
"bike:1"
> RPOP bikes:repairs
"bike:2"

 

در این مثال ما یک صف تعریف کردیم که در آن اولین ورودی، اولین خروجی است.

دستور “LPUSH” یک عنصر جدید به ابتدای لیست اضافه و دستور “RPOP” یک عنصر را از انتهای آن حذف کرده و برمی‌گرداند.

اگر بخواهیم اولین ورودی، آخرین خروجی باشد، باید لیست را به‌شکل پشته تعریف کنیم. دستور آن به شکل زیر خواهد بود:

 

> LPUSH bikes:repairs bike:1
(integer) 1
> LPUSH bikes:repairs bike:2
(integer) 2
> LPOP bikes:repairs
"bike:2"
> LPOP bikes:repairs
"bike:1"

 

دستور “LPOP” یک عنصر را از ابتدای لیست حذف و برمی‌گرداند.

  1. مجموعه 

نوع داده Sets در Redis، مجموعه‌ای نامرتب از رشته‌هایمنحصربه‌فرد هستند. 

کاربردها:

  • ردیابی موارد منحصر‌به‌فرد؛ به‌عنوان مثال، همه IPهای متصل‌شده به یک وبلاگ 
  • نمایش روابط؛ مانند مجموعه همه کاربران یک سیستم با نقش‌های معین خود
  • اجرای عملیات به‌خصوص برای مجموعه‌های مشترک؛ مثل intersection، unions و differences

سینتکس:

در مثال زیر، یک عضو جدید را با دستور “SADD” به مجموعه “bikes:racing” اضافه و اسامی دوچرخه‌های مسابقه‌ای فرانسوی و آمریکایی را در آن ذخیره می‌کنیم.

 

> SADD bikes:racing:france bike:1
(integer) 1
> SADD bikes:racing:france bike:1
(integer) 0
> SADD bikes:racing:france bike:2 bike:3
(integer) 2
> SADD bikes:racing:usa bike:1 bike:4
(integer) 2

 

توجه: اگر عضوی را که از قبل وجود دارد اضافه کنید، نادیده گرفته شده و به مجموعه اضافه نمی‌شود.

  1. هش 

هش‌های Redis انواع رکوردهایی هستند که به‌صورت مجموعه‌ای از جفت‌های فیلد-مقدار ساختار یافته‌اند. برترین ویژگی این مقادیر داده‌ای در ردیس، امکان افزودن، تغییر، افزایش یا حذف  جفت‌های فیلد-مقدار است. 

مقادیر فیلد در این نوع داده به‌عنوان رشته ذخیره می‌شوند؛ یعنی هیچ آرایه یا شی تودرتویی ندارند. 

ما نیازی به تعریف نام فیلدهای هش‌ نداریم. بنابراین می‌توانیم در صورت نیاز، آن‌ها را اضافه یا حذف کنیم.

کاربردها:

  • نمایش اشیا اصلی 
  • ذخیره گروه‌بندی شمارنده‌ها
  • تعریف فیلدهای وسیع با امکان اجرای عملیات بدون محدودیت 

سینتکس:

 

> HSET bike:1 model Deimos brand Ergonom type 'Enduro bikes' price 4972
(integer) 4
> HGET bike:1 model
"Deimos"
> HGET bike:1 price
"۴۹۷۲"
> HGETALL bike:1
۱) "model"
۲) "Deimos"
۳) "brand"
۴) "Ergonom"
۵) "type"
۶) "Enduro bikes"
۷) "price"
۸) "۴۹۷۲"

 

دستور “HSET” چندین فیلد از هش را می‌سازد و دستور “HGET” یک فیلد واحد را بازیابی می‌کند.

  1. مجموعه مرتب شده

Sorted Sets در Redis مجموعه‌ای از رشته‌های (اعضا) منحصربه‌فرد است که براساس یک امتیاز مرتبط، مرتب شده‌اند. 

هنگامی که بیش از یک رشته دارای امتیاز یکسانی باشد، آن‌ها را مرتب‌شده می‌نامیم.

کاربردها:

  • نگهداری فهرست‌های مرتب‌شده؛ مانند بالاترین امتیازها در یک بازی آنلاین 
  • محدود کردن سرعت (Rate)؛ مانند جلوگیری از درخواست‌های بیش‎ازحد یک API 

سینتکس: 

 

> ZADD racer_scores 10 "Norem"
(integer) 1
> ZADD racer_scores 12 "Castilla"
(integer) 1
> ZADD racer_scores 8 "Sam-Bodden" 10 "Royce" 6 "Ford" 14 "Prickett"
(integer) 4

 

ZADD شبیه SADD است؛ اما یک آرگومان اضافی می‌گیرد که در این مثال امتیاز (racer_scores) است. این آرگومان قبل از عنصری که باید اضافه شود قرار می‌گیرد.

  1. بیت مپ 

Redis Bitmaps به شما امکان انجام عملیات بیتی روی رشته‌ها را می‌دهند. درواقع بیت‌مپ‌ها یک نوع داده واقعی نیستند؛ بلکه مجموعه‌ای از عملیات بیت‌گرا هستند که روی نوع String تعریف می‌شوند. 

کاربردها:

  • نمایش یک مجموعه با اعضای مشخص؛ اعضایی که با اعداد صحیح ۰-N مطابقت دارند؛
  • مجوزهای شی (Object Permissions) که در آن هر بیت یک مجوز خاص را نشان می‌دهد؛ مانند فایل‌های سیستمی که مجوزها را ذخیره می‌کنند.

سینتکس:

 

> SETBIT pings:2024-01-01-00:00 123 1
(integer) 0
> GETBIT pings:2024-01-01-00:00 123
۱
> GETBIT pings:2024-01-01-00:00 456
۰

 

“SETBIT” یک بیت را در آفست ارائه‌شده روی ۰ یا ۱ تنظیم می‌کند. “GETBIT” مقدار یک بیت را در یک آفست معین برمی‌گرداند.

در این مثال، ما فرض کردیم که ۱۰۰۰ دوچرخه‌سوار داریم. هرکدام از آن‎‌ها در حومه شهر با حس‌گرهایی حاوی برچسب ۰-۹۹۹ روی دوچرخه‌هایشان مسابقه می‌دهند. حال می‌خواهیم تعیین کنیم که آیا حس‌گر معین در عرض یک ساعت، به سرور ردیابی پینگی فرستاده است یا خیر. هدف از این کار، بررسی سوارکار است.

پس این سناریو را با استفاده از یک بیت‌مپ که کلید آن به ساعت جاری ارجاع داده می‌شود، پیاده می‌کنیم.

Rider 123 در یک ژانویه ۲۰۲۴ در ساعت ۰۰:۰۰ به سرور پینگ می‌کند. پس می‌توانیم پینگ Rider 123 به سرور را تایید کنیم. همچنین در این سینتکس، بررسی می‌کنیم که آیا Rider 456 در همان ساعت به سرور پینگ کرده است یا خیر.

  1. هایپر لاگ لاگ 

HyperLogLogها یک ساختار داده موجود در Redis هستند که برای شمارش تعداد عناصر منحصربه‌فرد در یک مجموعه با استفاده از مقدار کمی حافظه ثابت استفاده می‌شوند. درواقع این نوع داده کاردینالیته یک مجموعه را تخمین می‌زند. 

پیاده‌سازی این نوع داده تا ۱۲ کیلوبایت حافظه استفاده می‌کند و خطای استاندارد ۰.۸۱٪ را ارائه می‌دهد.

کاربردها:

  • شمارش کوئری‌های منحصربه‌فرد انجام‌شده توسط کاربران در یک فرم جست‌وجو 
  • شمارش کوئری‌های واردشده در هر روز
  • شمارش تعداد بازدیدکنندگان یک صفحه سایت

سینتکس:

 

> PFADD bikes Hyperion Deimos Phoebe Quaoar
(integer) 1
> PFCOUNT bikes
(integer) 4
> PFADD commuter_bikes Salacia Mimas Quaoar
(integer) 1
> PFMERGE all_bikes bikes commuter_bikes
OK
> PFCOUNT all_bikes
(integer) 6

 

هربار که یک عنصر جدیدی را مدنظر داشتید، آن را با دستور “PFADD” به لیست شمارش اضافه کنید.

هنگامی که می‌خواهید تقریب فعلی عناصر منحصربه‌فرد اضافه‌شده را بازیابی کنید، از “PFCOUNT” کمک بگیرید. 

دستور “PFMERGE” دو عنصر هایپرلاگ‌لاگ مختلف را ادغام می‌کند.

  1. استریم 

نوع داده Stream در ردیس مانند یک گزارش کامل است؛ محلی که می‌توانید تمام جزئیات را در آن یادداشت کنید. این نوع داده در Redis برای پیگیری اتفاقاتی به‌کار می‌رود که یکی پس از دیگری رخ می‌دهد. ثبت داده در نوع Stream با جزئیات مربوط به هر رویداد انجام می‌شود.

کاربردها:

  • ضبط و پخش همزمان رویدادها در زمان حال
  • منبع‌یابی رویداد؛ مانند ردیابی اقدامات کاربر، کلیک‌ها و سایر عملکردهای او در برنامه یا وب‌سایت
  • نظارت بر حس‌گرها؛ به‌عنوان مثال، خواندن اطلاعات از دستگاه‌های ورودی
  • اعلان‌ها؛ مثل ذخیره یک رکورد از اعلان‌های هر کاربر در یک استریم جداگانه

سینتکس:

 

> XADD race:france * rider Castilla speed 30.2 position 1 location_id 1
"۱۶۹۲۶۳۲۰۸۶۳۷۰-۰"
> XADD race:france * rider Norem speed 28.8 position 3 location_id 1
"۱۶۹۲۶۳۲۰۹۴۴۸۵-۰"
> XADD race:france * rider Prickett speed 29.7 position 2 location_id 1
"۱۶۹۲۶۳۲۱۰۲۹۷۶-۰"

 

در این مثال، با دستور “XADD” یک ورودی جدید را به استریم اضافه کردیم. سینتکس بالا  نام، سرعت، موقعیت و شناسه مکان مسابقه را ثبت می‌کند. این اطلاعات وقتی مسابقه‌دهنده‌ها از ایست بازرسی عبور می‌کنند، به‌شکل یک ورودی در استریم ثبت می‌شوند.

  1. شاخص های جغرافیایی

Geospatial Indexes در Redis به شما اجازه می‌دهند تا مختصات را ذخیره و آن‌ها را در دیتابیس جست‌وجو کنید. 

کاربرد:

  • یافتن مکان‌ها در یک شعاع جغرافیایی معین یا محدوده مرزی

سینتکس:

 

> GEOADD bikes:rentable -122.27652 37.805186 station:1
(integer) 1
> GEOADD bikes:rentable -122.2674626 37.8062344 station:2
(integer) 1
> GEOADD bikes:rentable -122.2469854 37.8104049 station:3
(integer) 1

 

در این سینتکس، ما تمام ایستگاه‌های کرایه دوچرخه را که در نزدیکی مکان فعلی‌مان قرار دارند، تعریف کردیم. دستور “GEOADD” نوع داده Geospatial Indexes را می‌سازد تا بتوانیم مقدار موردنظر را در آن ذخیره کنیم.

  1. بیت فیلد

Bitfields در Redis مسئول نگه‌ داشتن مقادیر صحیح با طول بیت دل‌خواه هستند تا بتوانید آن‌ها را تنظیم، افزایش و دریافت کنید. 

این مقادیر با استفاده از رشته‌های Redis کدگذاری‌شده (به‌شکل باینری) ذخیره می‌شوند. 

کاربرد:

  • بهترین انتخاب برای مدیریت شمارنده‌ها و مقادیر عددی مشابه 

سینتکس:

 

> BITFIELD bike:1:stats SET u32 #0 1000
۱) (integer) 0
> BITFIELD bike:1:stats INCRBY u32 #0 -50 INCRBY u32 #1 1
۱) (integer) 950
۲) (integer) 1
> BITFIELD bike:1:stats INCRBY u32 #0 500 INCRBY u32 #1 1
۱) (integer) 1450
۲) (integer) 2
> BITFIELD bike:1:stats GET u32 #0 GET u32 #1
۱) (integer) 1450
۲) (integer) 2

 

۵ کاربرد ردیس در دنیای واقعی

در دو حالت می‌توان از Redis به‌صورت حداکثری استفاده کرد: ۱) FPC و ۲) ذخیره Sessionهای کاربر. در ادامه دلایل هرکدام را توضیح خواهیم داد.

  1. FPC

FPC مخفف Full Page Cache و به‌معنای کش کردن صفحه به‌صورت کامل است. ما می‌توانیم از Redis برای کش کردن صفحاتی از وب‌سایت یا بخش‌هایی از برنامه که تقاضای بالا و محتوای ثابتی دارند، استفاده کنیم. اگر صفحه حاوی محتوای ثابت باشد یا محتوای آن در هر دوره زمانی به‌روزرسانی می‌شود، می‌توانیم آن را کش کرده و در کمترین زمان نمایش دهیم.

  1. ذخیره Session های کاربر

برخلاف دیتابیس Memcached که داده‌ها را برای مدت کوتاهی نگه می‌دارد، Redis داده‌ها را به‌مدت طولانی نگه داشته و اجازه ذخیره‌سازی Session را می‌دهد. 

  1. مدیریت Session های کاربر

با ذخیره Sessionهای کاربر در برنامه و وب‌سایت، می‌توان آن‌ها را به‌راحتی در دیتابیس Redis مدیریت کرد. درنتیجه می‌توان به اهداف مهمی مانند بازیابی سریع و کارآمد Session و بهبود تجربه کاربر دست یافت.

  1. بازی‌ های موبایل

ویژگی‌های مرتبط‌با بازی‌ها و رویکرد گیمیفیکیشن در برنامه‌های موبایل، از نوع داده Sorted Sets استفاده می‌کنند. کاربرد دیگر Redis در بازی‌های موبایل، ساخت و به‌روزرسانی کارآمد امتیازات بازیکن به‌صورت بلادرنگ است. همچنین شبکه‌های اجتماعی و سایر سیستم‌هایی که تعامل کاربر در آن‌ها عنصر اصلی است، از Redis استفاده می‌کنند.

  1. شخصی‌ سازی تجربه کاربران

تنظیماتی که کاربر روی سایت و برنامه اعمال می‌کند، توسط ردیس ذخیره می‌شوند. این کار برای بازیابی سریع اطلاعات و امکان ارائه داده‌های متناسب‌با تجربه‌های او انجام می‌شود. همچنین کاربرد دیگر این دیتابیس، ذخیره موقعیت‌های جغرافیایی کاربر است تا بتوان مکان‌های مورد علاقه او را به‌صورت شخصی‌سازی‌شده و مطابق با محل فعلی ارائه داد.

آنچه در ردیس چیست و انواع آن کدامند خواندیم

Redis یک دیتابیس NoSQL است که سرعت و عملکرد کم‌نظیری به سرور می‌دهد. این پایگاه داده مزایای زیادی ازجمله نگهداری طولانی مدت اطلاعات، پشتیبانی از انواع داده و استفاده گسترده در تکنولوژی‌های جدید دارد؛ اما بهترین انتخاب برای داده‌های پیچیده یا استفاده در محیط‌های کوئری‌محور نیست. 

شما در چه سناریوهایی استفاده از Redis را مناسب می‌دانید؟ تجربه کار با آن را چگونه تلقی می‌کنید؟ می‌توانید تجربه و دانش خود را در بخش نظرات با ما در میان بگذارید.

چه رتبه ای می‌دهید؟

میانگین ۱ / ۵. از مجموع ۱

اولین نفر باش

title sign
معرفی نویسنده
نگین فاتحی
مقالات
35 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
نگین فاتحی

از اسفند 99 مشغول گشت‌وگذار توی دنیای کلمات هستم؛ با این هدف که خوب بنویسم و این چشم‌انداز که کمک‌های موثری کنم. حالا سه‌ ساله که توی زمینه‌های گوناگون بازاریابی آنلاین مطالعه می‌کنم و یکی از حوزه‌های موردعلاقم، رفتارشناسی مخاطبان این فضا هست. دستاوردهای این مطالعه شده نوشتن محتوایی که امیدوارم شما بخونی، لُب‌کلام رو متوجه بشی، لذت ببری و با دست پر صفحه رو ترک کنی؛ شایدم بقیه نوشته‌هام رو بخونی :)

title sign
دیدگاه کاربران