نام Redis از Remote Dictionary server گرفته شدهاست. Redis یکی از محبوبترین key-value storeها میباشد و هم چنین توسط برندهای بزرگ IT جهان استفاده میشود. لازم به ذکر است Amazon Elastic Cache از Redis پشتیبانی میکند. Redis یک دیتابیس No SQL است و بر روی مفهوم زوج کلید-مقدار (key-value ) کار میکند. key-value store امکانی را برای ذخیره دادهها که Value نامیده میشود، در یک Key فراهم میکند. شما میتوانید بعدا این دادهها را دریافت کنید، تنها اگر نام دقیق کلیدی را که برای ذخیره داده استفاده کردهاید، بدانید.
What Is In-Memory, Key-Value Store
Key-Value store یک سیستم ذخیره سازی است؛ جایی که دادهها به صورت زوج کلید-مقدار ذخیره میشوند. وقتی که میگوییم in-memory key-value store (زوج کلید-مقدار مقیم در حافظه)، منظور این است که زوج کلید-مقدار در حافظه اصلی RAM ذخیره میشوند. بنابراین میتوانیم بگوییم Redis دادهها را در حافظه به شکل زوج کلید-مقدار ذخیره کرده است.
در Redis کلیدها باید string باشند؛ ولی value ها میتوانند یک string ، list ، set ، sorted set یا hash باشند.
Advantage And Disadvantage of Redis over DBMS
Database Management systems همه چیز را در حافظه ثانویه ذخیره میکند که باعث میشود خواندن و نوشتن عملیات، تا اندازهای کند باشد. این در حالی است که Redis همه چیز را در حافظه اصلی ذخیره میکند و همین موضوع باعث میشود که خواندن و نوشتن دادهها توسط آن خیلی سریع باشند.
حافظه اصلی محدود است. بنابراین Redis نمیتواند فایلهای بزرگ یا binary data را ذخیره کند و تنها اطلاعات متنی کوچک را ذخیره میکند که نیاز است قابل دسترسی و اصلاح باشند و با نرخ خیلی سریعی قابل درج باشند. اگر تلاش کنیم که دادههای بیشتری را نسبت به حافظه موجود بنویسیم، در این حالت خطا دریافت خواهیم کرد.
Redis | RDBMS |
Redis همه چیز را در حافظه اصلی ذخیره میکند. | RDBMS همه چیز را در حافظه ثانویه ذخیره میکند. |
در Redis بخاطر ذخیره سازی دادهها در حافظه اصلی، خواندن و نوشتن عملیات به شدت سریع میباشد. | در RDBMS بخاطر ذخیره سازی دادهها در حافظه ثانویه، خواندن و نوشتن
عملیات کند است. |
حافظه اصلی از نظر size کوچکتر و از لحاظ قیمت نسبت به حافظه ثانویه گرانتر میباشد. Redis نمیتواند دادههای بزرگ یا binary data را ذخیره کند. | حافظه ثانویه از نظر size بزرگتر و از لحاظ قیمت نسبت به حافظه اصلی ارزانتر میباشد. RDBMS به آسانی میتواند با انواع فایلها کار کند. |
Redis Advantages
- Redis : Exceptionally fast خیلی سریع است و میتواند حدود 110000 ، SET و 81000 ، GET را به ازای هر ثانیه انجام دهد.
- Redis : Supports rich data type بیشتر دیتا تایپها را که توسعه دهندگان قبلا آنها را شناختهاند، پشتیبانی میکند؛ از قبیل string ، list ، set ، sorted set یا hash .
- Operations are atomic : تمام عملیات Redis اتمیک میباشند که این اطمینان خاطر را میدهد اگر دو کلاینت به صورت همزمان به آن دسترسی داشته باشند، Redis server مقدار update شده را دریافت خواهد کرد.
- Redis : Multi-utility tool یک ابزار چند منظوره است که میتواند در برخی از سناریوها استفاده شود از قبیل: Redis ) messaging-queues , caching به صورت بومی از Publish/Subscribe پشتیبانی میکند ) , هر داده ای با طول عمر کوتاه در Application مانند web application sessions , ... .
Redis Single Instance Architecture
معماری Redis شامل دو پروسه اصلی است:
1- Redis client
2- Redis Server
Redis client و Redis Server هر دو میتوانند در یک کامپیوتر یا کامپیوترهای متفاوت باشند. Redis server مسئول ذخیره سازی دادهها در حافظه میباشد. همانطور که متوجه هستیم، Redis همه چیز را در حافظه اصلی ذخیره میکند و حافظه اصلی فرار است؛ از این رو زمانیکه Redis server یا کامپیوتر را راه اندازی مجدد (restart) میکنیم، همه دادههای ذخیره شده را از دست خواهیم داد. بنابراین نیازمند یک راهحل، جهت ماندگاری datastore میباشیم.
سه راه متفاوت وجود دارد که Redis را پایدار میکند : RDB ، AOF و دستور SAVE
1- RDB : RDB Mechanism یک نمونه از تمام دادههای در حافظه را تهیه و آنها را در حافظه ثانویه ذخیره میکند (ذخیره سازی ماندگار) که در یک وقفه مشخص اتفاق میافتد. بنابراین این شانس وجود دارد که شما دادههایی را از دست بدهید که بعد از آخرین Set , RDB’s snapshot شدهاند .
2-AOF : AOF همه عملیات نوشتن دریافت شده توسط سرور را ثبت میکند. بنابراین همه چیز پایدار است. مشکل استفاده از AOF این است که برای هر عملیات، شروع به نوشتن در دیسک میکند و این یک کار هزینهبر است و هم چنین اندازه فایل AOF بزرگتر از RDB میباشد.
3-SAVE Command : شما میتوانید Redis server را مجبور کنید که یک RDB snapshot را ایجاد کند؛ هر زمانکه Redis console client از دستور SAVE استفاده میکند.
در ضمن میتوانید از AOF و RDB با هم استفاده کنید تا بهترین نتیجه ماندگاری را داشته باشید.
Redis Replication
Replication یک تکنیک است که کامپیوترها را درگیر میکند تا دسترسی پذیری دادهها و تحمل خطا را با ضریب بیشتری امکان پذیر کنند. در یک محیط Replication، کامپیوترها، دادههای یکسانی را با یکدیگر به اشتراک میگذارند؛ حتی اگر چندین کامپیوتر دچار مشکل شوند، باز هم، همه دادهها در دسترس خواهند بود که به صورت Master/Slaves میباشند.
تمام slaveها شامل دادههای یکسانی همانند master میباشند. وقتیکه یک slave جدید در محیط Replication ایجاد میشود، master به صورت خودکار همه دادهها را با sync ، slave میکند.
تمام Query ها به سرور master هدایت میشوند و سپس سرور master عملیات را اجرا میکند. وقتیکه یک عملیات نوشتن اتفاق میافتد، سرور master دادههایی را که بهتازگی نوشته شدهاند، در تمام slaveها تکثیر میکند.
اگر اتفاقی در سرور master رخ دهد، تمام دادهها از بین میروند؛ در این حالت باید یک slave را به master تبدیل کنیم.
Clustering In Redis
Clustering یک تکنیک میباشد که توسط آن میتوان دادهها را در چندین کامپیوتر تقسیم بندی کرد. فرض کنید که یک سرور Redis را با 64GB حافظه در اختیار داریم. در این حالت میتوانیم 64GB داده داشته باشیم. اگر 10 تا clustered computer را که هر کدام 64GB حافظه اصلی دارند، داشته باشیم، در این حالت میتوان 640GB داده را ذخیره کرد.
در تصویر بالا میتوانیم ببینیم که دادهها در چهار node، ذخیره شدهاند. هر node یک Redis Server پیکربندی شده میباشد؛ به عنوان یک cluster node. اگر یکی از node ها دچار مشکل شوند، سپس کل cluster متوقف میشود.
Redis Client
وب سایت
Try Redis ، یک Redis console client آنلاین است و به شما کمک میکند تا یاد بگیرید چگونه از Redis console client
استفاده کنید.
در قسمت بعد در رابطه با نصب Redis بر روی سیستم عامل ویندوز و دیتا تایپها در Redis صحبت خواهیم کرد.