آموزش ردیس

آنچه در این صفحه می خوانید:

معرفی ردیس (Redis)

Redis یک پروژه ساختار داده در حافظه است که از یک پایگاه داده توزیع شده با حافظه کلید با دوام اختیاری استفاده می کند. ردیس به عنوان پایگاه داده، cache و message broker استفاده می شود. ردیس با اسکریپت نویسی LUA ساخته شده است که قابلیت دسترسی بالا از Redis Sentinel و پارتیشن بندی خودکار با Redis Cluster را فراهم می کند. Redis در ANSI C نوشته شده و در اکثر سیستم های POSIX مانند لینوکس، BSD ،OS X بدون وابستگی های خارجی کار می کند. لینوکس و OS X دو سیستم عاملی هستند که Redis در آنها توسعه یافته و تست شده است و توصیه می کنیم از لینوکس برای استقرار استفاده کنید. می تواند توسط اپلیکیشن ها از طریق کتابخانه API کلاینت خود به آن دسترسی پیدا کرد. این پروژه عمدتاً توسط Salvatore Sanfilippo ساخته شده است و از سال 2019، توسط پشتیبانی Redis Labs پشتیبانی می شود.

تاریخچه ردیس (Redis)

نام Redis به معنی Remote Dictionary Server است. پروژه Redis از زمانی شروع شد که سالواتوره سانفیلیپو، با نام مستعار antirez، توسعه دهنده اصلی Redis، در تلاش بود تا مقیاس پذیری استارتاپ ایتالیایی خود را بهبود بخشد و آنالیز ورود به وب را در real-time انجام دهد. Sanfilippo پس از مواجهه با مشکلات قابل توجهی در مقیاس بندی برخی از انواع کار با استفاده از سیستم های سنتی پایگاه داده، شروع به نمونه سازی اولین اثبات نسخه مفهومی Redis در Tcl کرد. بعداً سانفیلیپو آن نمونه اولیه را به زبان C ترجمه کرد و اولین نوع داده یعنی لیست را پیاده سازی کرد. پس از چند هفته استفاده موفقیت آمیز از این پروژه، موفقیت آمیز Sanfilippo تصمیم گرفت آن را اوپن سورس اعلام کند و این پروژه را در هکر نیوز اعلام کرد. این پروژه به ویژه در بین جامعه روبی شروع به جذب کرد، به این ترتیب که GitHub و Instagram در بین اولین شرکت هایی که آن را تصویب کردند.

سانفیلیپو در مارس 2010 توسط VMware استخدام شد. در ماه مه 2013، Redis توسط Pivotal Software (یک VMware spin-off) حمایت مالی شد. در ژوئن سال 2015، توسعه توسط Redis Labs حمایت مالی شد. در اکتبر 2018 Redis 5.0 منتشر شد، با معرفی Redis Stream، یک ساختار داده جدید که امکان ذخیره چندین فیلد و مقادیر رشته با یک توالی خودکار و مبتنی بر زمان را در یک کلید واحد فراهم می کند.

ویژگی های ردیس (Redis)

Redis، ذخیره سازی ساختار داده های حافظه است که به عنوان بانک اطلاعاتی، حافظه نهان و پیام مورد استفاده قرار می گیرد. این ساختار از داده ها مانند رشته ها، هش ها، لیست ها، مجموعه ها، مجموعه های مرتب شده با نمایش داده های دامنه، بیت مپ ها، هایپرلاگ ها، فهرست های مکانی با شاخص های شعاع و جریان پشتیبانی می کند. Redis دارای همانند سازی داخلی، اسکریپت Lua، بیرون کشیدن LRU، تراکنش ها و سطوح مختلف پایداری روی دیسک است و از طریق Redis Sentinel و پارتیشن بندی خودکار با Redis Cluster در دسترس بالایی قرار می دهد.

شما می توانید عملیات اتمی را بر روی این نوع داده ها، مانند اضافه کردن به یک رشته انجام دهید. برای دستیابی به عملکرد برجسته خود، Redis با یک مجموعه داده حافظه کار می کند. بسته به نوع مورد استفاده شما، می توانید با رها کردن مجموعه داده به دیسک، هر چند وقت یکبار یا با افزودن هر دستور به یک لاگ، آن را ادامه دهید. اگر فقط به یک حافظه نهان سرشار از ویژگی، شبکه و دارای حافظه نیاز دارید، ماندگاری می تواند به صورت اختیاری غیرفعال شود. Redis همچنین از master-slave asynchronous replication بی اهمیت به تنظیم، با هماهنگ سازی خیلی سریع non-blocking، اتصال مجدد خودکار با هماهنگ سازی جزئی در شبکه ها پشتیبانی می کند.

سایر ویژگی ها عبارتند از:

  • Transactions
  • Pub/Sub
  • اسکریپت Lua
  • کلیدهایی با مدت زمان محدود (limited time-to-live)
  • اخراج کلیدها از LRU
  • failover خودکار

Redis نقشه ها را به انواع مقادیر نقشه می دهد. تفاوت مهم بین Redis و سایر سیستم های ذخیره سازی ساخت یافته این است که Redis نه تنها از رشته ها بلکه انواع داده انتزاعی را پشتیبانی می کند:

  • لیست رشته ها
  • مجموعه رشته ها (مجموعه عناصر غیر تکرار نشده)
  • مجموعه ای از رشته ها (مجموعه ای از عناصر غیر تکراری که به وسیله یک عدد شناور به نام نمره سفارش داده می شوند)
  • جداول هش که کلیدها و مقادیر رشته هستند.
  • HyperLogLogs مورد استفاده برای تخمین اندازه کاردینالیت تقریبی مجموعه، از زمان 2.8.9 Redis در آوریل 2014 در دسترس است.
  • جریان ورودی با گروه های مصرف کننده، به شما امکان می دهد چندین فیلد و مقادیر رشته ای را با یک ترتیب خودکار و مبتنی بر زمان بر روی یک کلید واحد، که از زمان Redis 5.0 در اکتبر 2018 موجود است، ذخیره کنید.
  • داده های جغرافیایی از طریق اجرای تکنیک geohash، از Redis 3.2 در دسترس است.

نوع مقدار مشخص می کند که چه عملیاتی (دستورات) برای مقدار در دسترس هستند. Redis از عملکرد سطح بالا، اتمی و سمت سرور مانند تقاطع، اتحادیه و تفاوت بین مجموعه ها و مرتب سازی لیست ها، مجموعه ها و مجموعه های مرتب شده پشتیبانی می کند. انواع داده های بیشتر بر اساس API ماژول های Redis پشتیبانی می شوند. ماژول Redis RedisJSON پیاده سازی ECMA-404 (استاندارد جاواسکریپت داده ها (JSON) داده تبادل داده) به عنوان یک نوع داده نیتیو است.

کاربرد ردیس (Redis)

Session Cache

یکی از موارد بارز در مورد استفاده برای Redis استفاده از آن به عنوان حافظه نهان است. مزیت استفاده از Redis نسبت به سایر استور های نشست مانند Memcached این است که Redis استقامت را پیشنهاد می کند. در حالی که حفظ حافظه پنهان از نظر سازگاری به طور معمول مهم نیست، اما اکثر کاربران اگر تمام جلسات سبد خریدشان از بین می رفت، اهمیت آن نمایان می شد. خوشبختانه با رونمایی از steam Redis در طی این سال ها، یافتن اسنادی درباره نحوه استفاده مناسب از Redis برای ذخیره سازی جلسه، بسیار آسان است. حتی پلتفرم شناخته شده تجارت الکترونیک Magento دارای افزونه ای برای Redis است!

حافظه نهان صفحه کامل (FPC)

خارج از نشانه های نشست های اصلی شما، Redis یک پلتفرم FPC بسیار آسان را برای کار در اختیار شما قرار می دهد. بازگشت به ثبات، حتی در همه راه اندازی مجدد نمونه های Redis، با تداوم دیسک کاربران شما شاهد کاهش سرعت بارهای صفحه خود نخواهند بود. برای استفاده دوباره از Magento به عنوان نمونه، Magento افزونه ای را برای استفاده از Redis به عنوان یک پس زمینه کش کامل صفحه ارائه می دهد. همچنین، برای کاربران وردپرس شما در آنجا، Pantheon یک افزونه عالی به نام wp-redis دارد تا به شما در دستیابی سریعترین بارهای صفحه ای که تا به حال دیده اید کمک کند!

صف

بهره گیری از لیست ذخیره و موتور ذخیره سازی در حافظه Redis، باعث می شود آن را به یک سکوی شگفت انگیز برای استفاده از صف پیام تبدیل کنید. تعامل با Redis به عنوان یک صف باید برای هر کسی که عادت دارد از اعمال push/pop با لیست در زبان های برنامه نویسی مانند پایتون استفاده کند، احساس نیتیو کند. اگر جستجوی سریع Google را در مورد "صف های Redis" انجام دهید، خواهید دید که هزاران پروژه اوپن سورس وجود دارد که هدف آنها ساختن Redis به ابزار پشتیبان بسیار جذاب برای تمام نیازهای شما در صف است.

Leaderboards - Counting

Redis یک کار شگفت آور را با افزایش و کاهش داخل حافظه انجام می دهد. مجموعه های مرتب شده نیز کار ما را در تلاش برای انجام این نوع عملیات آسان می کند و Redis نیز به همین ترتیب اتفاق می افتد که هر دو ساختار داده را ارائه می دهد. کمپانی های بزرگی مانند توییتر از Redis استفاده می کنند، وب سرویس آمازون در نمونه کارها خود Redis را ارائه می دهد، مایکروسافت Redis Cache را در Azure ارائه می دهد و Alibaba در حال ارائه ApsaraDB برای Redis در Alibaba Cloud است.

آشنایی با AWS Redis

Amazon ElastiCache برای Redis یک سرویس ساختار داده در حافظه سازگار با Redis است که می تواند به عنوان یک ذخیره داده یا حافظه پنهان استفاده شود. این سهولت استفاده و قدرت Redis را به همراه در دسترس بودن، قابلیت اطمینان، مقیاس پذیری، امنیت و عملکرد مناسب برای برنامه های کاربردی مناسب ارائه می دهد. این سرویس کاملاً مدیریتی، مقیاس پذیر و ایمن است و آن را به عنوان کاندیدای ایده آل برای تهیه موارد استفاده با کارایی بالا مانند وب، برنامه های موبایل، برنامه های بهداشتی، برنامه های مالی، بازی، Ad-Tech و اینترنت اشیا (IoT) تبدیل می کند. شما دیگر نیازی به انجام کارهای تخصصی وقت گیر مانند تهیه، نصب، تهیه نسخه پشتیبان، بازیابی، تشخیص خرابی و تعمیر ندارید. هزینه های پیشرو یا تعهدات بلند مدت وجود ندارد، شما فقط هزینه هر ماه ساده برای هر گره Redis که استفاده می کنید پرداخت می کنید.

این سرویس به گونه ای طراحی شده است که بطور خودکار از خرابی های گره یا خرابی موتور شناسایی و بازیابی شود. با استفاده از Multi-AZ با عدم موفقیت خودکار، به شما امکان می دهد گره های ماکت را در چندین منطقه در دسترس AWS برای دسترسی زیاد گسترش دهید. اگر یک گره اصلی کم شود، به طور خودکار در یکی از 5 تکرار خوانده شده شکست خواهد خورد.

با چند کلیک در کنسول مدیریتی AWS، می توانید به سرعت یک گروه Cache Cluster یا Replication Group راه اندازی کنید و آن را مطابق با نیاز خود پیکربندی کنید. طیف وسیعی از اندازه های گره و همچنین مقیاس بندی عمودی فشار دکمه را ارائه می دهد. علاوه بر این، برای فعال کردن حالت خوشه Redis، از خوشه آنلاین پشتیبانی می کند که اندازه آن در مقیاس در خوشه Redis شما بدون خرابی است و با تغییر تقاضا سازگار است.

مثال ردیس (Redis)

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

> set mykey somevalue
OK
> get mykey
"somevalue"

همانطور که مشاهده می کنید استفاده از دستورات SET و GET راهی است که ما می توانیم مقدار رشته را تنظیم و بازیابی کنیم. توجه داشته باشید که در صورت وجود کلید در حال حاضر، حتی اگر کلید با یک مقدار غیر رشته همراه باشد، می تواند هر مقدار موجود را که قبلاً در کلید ذخیره شده بود جایگزین کنید. بنابراین SET یک تکلیف را انجام می دهد. مقادیر می توانند رشته ها (از جمله داده های باینری) از هر نوع باشند، به عنوان مثال، می توانید یک تصویر jpeg را درون یک مقدار ذخیره کنید. یک مقدار نمی تواند بزرگتر از 512 مگابایت باشد.

دستور SET گزینه های جالبی دارد که به عنوان آرگومان اضافی ارائه می شوند. به عنوان مثال، من می توانم از SET بخواهم اگر کلید از قبل وجود داشته باشد یا برعکس، این کار را انجام دهد که تنها درصورتی که کلید از قبل وجود داشته باشد موفق می شود:

> set mykey newval nx
(nil)
> set mykey newval xx
OK

حتی اگر رشته ها مقادیر اساسی Redis باشند، عملیات جالبی وجود دارد که می توانید با آنها انجام دهید. به عنوان مثال، یکی افزایش اتمی است:

> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152

نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود