Redis چیست؟ در سادهترین حالت، میتوان گفت Redis یک سیستم پایگاه داده برای نگهداری و بازیابی دادهها است. عبارت Redis یا ردیس از ترکیب حروف ابتدایی سه واژهی Remote Dictionary server ساخت شده است. ردیس یک پایگاه داده برپایه NoSQL است که حدودا از سال ۲۰۰۹ فعالیت خودش را شروع کرده است. این پایگاه داده، به صورت متن باز منتشر شده و امروزه تحت پشتیبانی Radis Lab قرار دارد. به عبارت سادهتر Redis یک برنامهای است که می تواند دادهها را در رم نگهداری کند. از این کار میتوان به عنوان دیتابیس یا سیستم کش و یا سیستم message broker استفاده کرد.
سایت redis.io خود را این گونه معرفی کرده است:
“Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.”
Redis تقریبا میتواند با همه زبانهای برنامهنویسی به خوبی کار کند و در آنها بهترینها کارکرد خود را به نمایش بگذارد. Redis معمولا برای هر زبان برنامهنویسی یک پکیج معروف دارد که همه قابلیتهای Redis در آن قابل استفاده هستند. به طور مثال در در سیشارپ کتابخانه StackExchange.Redis و در پایتون کتابخانه redis-py نمونهای از این پکیجها هستند.
مهمترین ویژگیهای پایگاه داده Redis چیست؟
سیستم ذخیرهسازی In-Memory Data Structure
یکی از نکات مهمی که باعث ایجاد سرعت بیشتر در ردیس شده است، استفاده از RAM برای ذخیرهسازی، نگهداری و بارگذاری دادهها است که باعث میشود سرعت دسترسی و بازیابی دادهها افزایش پیدا کند.
استفاده از ردیس به عنوان حافظه نهان یا Cache
ردیس این قابلیت را دارد تا کمک کند که دادهها به جای این که روی سرور قرار گرفته و هر بار از سرور به مرورگر مخاطب ما ارسال شوند، یکبار دریافت شده و روی ردیس به عنوان کش یا حافظه پنهان قرار بگیرند و هر بار که مخاطب درخواستی را در صفحات وب دارد، به جای بارگذاری صفحات در سرور و بازیابی دوباره آنها، فقط کافی است که دادهها از ردیس به عنوان حافظه پنهان، بازیابی شوند.
ردیس مبتنی بر حالت کلید و مقدار یا Key/Value
گاهی سایت یا برنامه وبی که طراحی کردهاید، هنوز در ابتدای کار است و در پایگاه دادهای تهیه کردهاید، دادههای زیادی ذخیره نشدهاند و کار برای بازیابی و دسترسی به آنها راحت است. اما اگر کمی جلوتر برویم و مقادیر داده درون پایگاه داده زیاد شوند، دیگر بازیابی دادهها به سادگی قبل نیست. با استفاده از این قابلیت در ردیس شما میتوانید برای هر مقدار، یک کلید مشخص تعریف و آن را ذخیره کنید. این کار باعث میشود که بتوانید با سرعت زیادی دادهها و مقادیر خود را به بهترین شکل بازیابی کنید.
پشتیبانی از جداول هش (Hash) و قابلیت HyperLogLog
HashTable یا جدول هش، نوعی ساختار هستند که برای ذخیره و بازیابی دادهها از آن استفاده میکنیم. به این صورت است که ما برای هر داده یا مجموعهای از دادهها، یک کلید مشخص تعریف میکنیم که هنگام استفاده از این کلید در جدول هش، به آسانی به همان داده یا مجموعه دادهها مورد نظر میرسیم.
از قابلیتهای دیگر ردیس، استفاده از HyperLogLog است. زمانی که شما میخواهید در یک فهرست بزرگ که در آن هر فهرست شامل تعدادی رشته است و رشتهها هم دارای عناصر و کاراکترهای مشخصی هستند، عنصری مشخصی را پیدا کنید و درباره این که این عنصر چه تعداد تکرار شده است، اطلاع پیدا کنید؛ میتوانید از خاصیت HyperLogLog استفاده کنید. در این حالت شما با استفاده از الگوریتمهای خاصی و با دقت بسیار بالا، میتوانید تکرار عناصر را بسنجید.
استفاده از سیستم تکثیر
ردیس از یک سیستم تکثیر سریع و آسان با نام master-slave replication استفاده میکند که در آن نسخه فرعی یا slave، میتواند در صورت خرابی نسخه تابع یا master، جای خالی آن را پر کند. در واقع باید بگوییم که نسخههای فرعی (متبوع) خود رونوشتی از نسخههای اصلی (تابع) هستند.
Redis Persistence چیست؟
Redis تنها اطلاعات شما را روی رم نگهداری نمیکند بلکه به ۲ روش RDB و AOF از اطلاعات شما یک بکاپ میگیرد و آنها را روی هارد شما ذخیره میکند.
روش اول RDB
RDB روش پیشفرضی هست که Redis با کمک آن از اطلاعات شما بکاپ میگیرد و نیازی نیست که برای انجام این کار درخواست دهید. در این روش Redis هر چند ثانیه یکبار که مدت زمان آن قبل تنظیم است از اطلاعاتی که درون رم شماست بکاپ میگیرد و در هارد ذخیره میکند. معمولا اگر اطلاعات ذخیره شده، خیلی برای شما مهم نباشد؛ استفاده این روش خوب است اما استفاده از این روش هنگامی که اطلاعاتی ذخیره شده مهم هستند، پیشنهاد نمیشود.
فرض کنید که در حال ذخیره اطلاعات تعدادی از کاربران هستید و Redis برای این که هر ۱۰ ثانیه بکاپ بگیرد، تنظیم شده است. ما ظرف ۴ ثانیه اطلاعات ۱۰،۰۰۰ کاربر را وارد کردیم اما در ثانیه ششم سرور خاموش میشود. در این سناریو به راحتی اطلاعات کل کاربران را از دست دادهایم. برای کنترل مشکلاتی از این دست باید از روش AOF استفاده کنیم.
روش دوم AOF
روش AOF هنگامی استفاده میشود که در نظر دارید، شانس از دست دادن اطلاعات را به صفر برسانید. در این حالت هر ثانیه از اطلاعات شما بکاپ گرفته و در یک فایل داخل هارد شما ذخیره می شود. با این کار بعید است که اطلاعات شما مشکل پیدا کند. برای فعالسازی این قابلیت کافی است که در فایل کانفیگ Redis قسمت appendonly را از no به yes تغییر دهید.
راهاندازی Redis روی داکر
مانند هر دیتابیس دیگری، Redis هم یک سرور برای ذخیره دادهها در رم و کلاینتها دارد که در قبال آن دستوراتی را اجرا میکند. برای راهاندازی سرور بر روی دستگاه خود، پیشنهاد میکنیم از داکر Docker استفاده کنید. زیرا شروع کار با آن بسیار ساده است. اگر Docker daemon را روی سیستم خود دارید، این دستور را اجرا کنید:
docker run --rm -it --name local-redis -p 6379:6379 redis
این دستور یک محفظه Docker با نام «local-redis» را بر روی localhost شما با پورت ۶۳۷۹ اجرا میکند. این دستور از تصویر رسمی Redis docker برای اجرای محفظه استفاده میکند. برای کلاینت، میتوانیم از redis-cli برای اجرای دستورات از کنسولروی سرور Redis استفاده کنیم. یک تب جدید باز کنید، و دستور زیر را برای شروع یک redis-cli session که به یک نمونه سرور Redis داخلی متصل است، استفاده کنید.
docker run -it --link local-redis:redis --rm redis redis-cli -h redis -p 6379
حالا میتوانیم شروع به اجرای چند دستور پایه در Redis کنیم.
دستورات:
تنظیم یک مقدار
سینتکس:
SET <key> <value>
مثال:
SET firstname Albert
بازیابی یک مقدار
سینتکس:
GET <key>
مثال:
GET firstname
بررسی وجود یک کلید
سینتکس:
EXISTS <key>
حذف یک کلید
یک کلید میتواند همراه با حافظه مربوطه، به صورت زیر حذف شود.
DEL <key>
این یک عملیات blocking همگام است.
روشی بهتر برای حذف کلیدها، لغو ارتباط آنها است، که حافظه مربوط به آنها میتواند بعدا جمعآوری شود.
UNLINK <key>
تعیین تاریخ انقضا برای یک کلید
EXPIRE <key> <seconds>
PEXPIRE <key> <milliseconds>
تنظیم یک کلید، بررسی وجود آن و تاریخ انقضا به طور همزمان
سینتکس:
SET <key> <value> <EX seconds>|<PX milliseconds> NX|NX
NX – فقط وقتی که یک کلید وجود ندارد، تنظیم کن.
XX – فقط وقتی که یک کلید از قبل وجود دارد، تنظیم کن.
EX – زمان انقضا را برای کلید بر حسب ثانیه تعیین کن.
PX – زمان انقضا را برای کلید بر حسب میلی ثانیه تعیین کن.
مثال:
SET firstname Albert EX 1۰ NX
این دستور، کلید firstname را با زمان انقاضی ۱۰ ثانیه، فقط وقتی که کلید مورد نظر وجود ندارد، مساوی با مقدار «Albert» قرار میدهد
افزایش یا کاهش یک مقدار integer
Redis روش مناسبی برای افزایش یا کاهش مقادیر integer که شاید به عنوان شمارنده استفاده شوند، فراهم کرده است.
سینتکس:
INCR <key>
DECR <key>
INCRBY <key> <increment value>
DECRBY <key> <decrement value>
مثال:
- SET counter 4
- INCRBY counter 6
کلید شمارنده در هنگام شروع مقدار ۴ را خواهد داشت، و پس از دستور دوم، به ۱۰ افزایش خواهد یافت.
تمام دستورات اشاره شده در بالا فقط برای ذخیرهسازی و دستکاری رشتهها و مقادیر integer بودند. ساختارهای داده دیگری مانند hash ها، set ها، آرایههای bit و… نیز وجود دارند، که میتوانند برای حل مشکلات پیچیده استفاده شوند.
جمعبندی
ردیس (Redis) یک سیستم مدیریت دادهها در حافظه (In-Memory Data Structure Store) متنباز با مجوز BSD است که به عنوان پایگاه داده، کش (Cache) و بروکر پیام استفاده میشود. Redis قابلیت نگهداری دادهها را در حافظه RAM دارد و به دلیل سرعت بالا و قابلیت اطمینان، برای کاربردهایی مانند کش (Cache) و جلوگیری از بار سرور بسیار مناسب است. Redis از دادهساختارهای مختلفی مانند رشته، لیست، مجموعه و … پشتیبانی میکند و دارای امکاناتی مانند توزیع شده بودن، پشتیبانی از تراکنشها و … است. Redis به زبان C نوشته شده است و API برای زبانهای مختلفی مانند C++, Python, Java, PHP, Rubyو… دارد. Redis به دلیل سرعت بالا، قابلیت اطمینان و پشتیبانی از داده ساختارهای مختلف، در بسیاری از شرکتها و سرویسهای ابری مورد استفاده قرار میگیرد. امیدوارم خواندن این مقاله به شما کمک کرده باشد تا پاسخ مناسبی برای سوال «Redis چیست؟» پیدا کرده باشید.
دیدگاهتان را بنویسید