ردیس (Redis) چیست؟ به همراه ویژگی های آن
سلام,
علی اوشنی هستم,دانشجوی رشته ی مهندسی کامپیوتر,
از دانشگاه صدرا
![](https://files.virgool.io/upload/users/204877/posts/jv07n1o2k2hm/cq8smg4axkgf.png)
برای کاربرد ردیس (Redis)، کافی است نگاهی به مارکتهای فروش اپلیکیشن برای گوشیهای هوشمند داشته باشید تا متوجه شوید این روزها تا چه اندازه اپهای موبایل مخاطب دارند. از طرف دیگر کسبوکارهای زیادی را شاهد هستیم که تجارت خود را به وبسایتها منتقل کردهاند و از این طریق به موفقیتهای بیشتری دستپیدا کردهاند.این امر باعث شده تا برنامههایی که در سمت سرور (Server Side)، اجرا میشوند مخاطبین بیشتری پیدا کنند. سازوکار این برنامهها باید به نوعی باشد که بتوانند پاسخگوی حجم بالای درخواستهایی سمت سرور باشند.
از طرف دیگر این درخواستها باید با سرعت پاسخ داده شوند تا شاهد ترافیک دادهها نباشیم.در این بین همانگونه که شما بهتر از ما میدانید بهترین راهحل در این زمینه استفاده از بانکهای اطلاعاتی NoSQL است. جالب است بدانید یکی از پرطرفدارترین و کارآمدترین سرورهای پایگاهداده را میتوان Redis نام برد و به احتمال زیاد شما هم از Redis بسیار شنیدهاید و این پرسش برای شما مطرح شده که ردیس چیست و چه ویژگیهایی دارد. به همین منظور قصد داریم با هم نگاهی به Redis داشته باشیم و با ویژگیهای آن آشنا شویم.
![](https://files.virgool.io/upload/users/204877/posts/jv07n1o2k2hm/xdbkbx0wyymt.jpeg)
ردیس (redis) چیست:
این فناوری به عنوان پایگاه دادهای در حافظه اصلی (In memory) است که برای نگهداری پایگاه داده، حافظه پنهان (Cache) و واسط پیام (Message Broker) استفاده میشود.
درواقع میتوان گفت ردیس دادهها را با سیستم Key-value نگهداری میکند و به لطف این ویژگی از آنجایی که رابطه پیچیدهای میان دادهها ایجاد نمیشود، دسترسی و بازیابی این اطلاعات بسیار سادهتر خواهد شد. ردیس (Redis) به عنوان پایگاه داده و کش مورد استفاده قرار می گیرد.
سیستم های ذخیره سازی Key-Value سیستم هایی هستند که اطلاعات به صورت کلید و مقدار ذخیره می شوند. وقتی می گوییم سیستم in-memory key-value به معنی این است که این سیستم اطلاعات را در RAM نگهداری می کند پس سرعت دسترسی به اطلاعات قاعدتاً چند برابر خواهد شد. در ردیس هر رکورد یک عنوان و یک داده دارد.
این روزها شاهد پشتیبانی Redis از انواع مختلف دادهها مانند String, Hash, List, Set و Sorted Set هستیم. از طرف دیگر با توجه به این امر که دادهها بوسیله Redis در حافظه اصلی مستقر میشوند، این فرآیند سرعت چشمگیری دارد.
این موارد باعث شده تا Redis گزینه خوبی برای Caching, Counting, Queues و Pub and Sub بهحساب بیاید.
تفاوت عمده بین Redis و دیگر سیستمهای پایگاه ذخیره سازی داده ها این است که Redis نه تنها مقدار رشته را می پذیرد بلکه مقادیر داده ای زیر را نیز پشتیبانی می کند.
![](https://files.virgool.io/upload/users/204877/posts/jv07n1o2k2hm/ci23mlthlefh.png)
کاربرد Caching در Redis چیست:
همانگونه که حتماً بهخوبی میدانید زمانی از Caching استفاده میشود که قصد داشته باشیم دسترسی به هارد دیسک کمتر انجام شود، به عبارت دیگر در Caching اطلاعات در حافظه موقت ذخیره میشود که این فرآیند سرعت دسترسی به اطلاعات و بارگذاری آنها را افزایش میدهد. به این ترتیب به جای چندین بار مراجعه برای بازخوانی اطلاعات از سرورها، این اطلاعات یک بار دریافت شده و در قالب حافظه نهان که همان Caching است در ردیس قرار میگیرد.. از این طریق در کنار صرفهجویی در زمان و افزایش سرعت، دسترسی کمتری به منابع نیاز انجام میشود که این امر نیز به بهینهسازی بیشتر کمک میکند.
![](https://files.virgool.io/upload/users/204877/posts/jv07n1o2k2hm/xsowczfoggjt.png)
در این بین به این نکته نیز باید اشاره کرد که در ردیس اطلاعات در حافظه موقتی و Cache ذخیره میشوند، این امر باعث میشود دسترسی به آنها با سرعت بسیار بیشتری انجام شود اما این سکه روی دیگری نیز دارد و امکان ذخیرهسازی دائمی اطلاعات را در Redis نخواهید داشت. به این ترتیب برای نمونه اگر قصد دارید اطلاعات مهم یک مجموعه تجاری را به صورت دائم ذخیرهسازی کنید، Redis در این زمینه کاربردی نخواهد داشت. اما از طرف دیگر روی Redis برای ذخیره کوکیها، Session، اطلاعات مربوط به ورود و خروج کاربران و به اشتراکگذاری دادهها میتوانید حساب باز کنید. بهعبارت سادهتر هر دادهای که لزومی به ذخیره دائم ندارد را میتوان با Redis مدیریت کرد.
چرا Redis توصیه میشود:
در دنیای کامپیوتر سرعت حرف اول را میزند و فناوریهایی که سرعت بیشتری را در اختیار کاربر و مدیران قرار میدهند طرفداران بیشتری دارند. نقطه قوت ردیس نیز سرعت بیش از حد این فناوری است و از آنجایی که با زبان C نوشته شده است، شاهد افزایش سرعت چشمگیری در ردیس هستیم.
از طرف دیگر ساختار Redis به عنوان یک پایگاه داده NoSql شناخته میشود که این ویژگی نیز مورد توجه توسعهدهندگان قرار گرفته است. تمامی این موارد دست به دست هم داده است تا شرکتهای بزرگ فناوری روزبهروز بیشتر به سمت استفاده از Redis گرایش پیدا کنند که در این زمینه میتوان به سایت های بزرگی مانند Github, Weibo, Pinterest, Snapchat, Craigslist, Diggs, StackOverflow و FlickR اشاره کرد. به این ترتیب انتظار میرود در آینده نیز شاهد افزایش دامنه استفادهکنندگان Redis باشیم.
این فناوری تعامل کمتری با پایگاههای داده مستقر در بستر رایانش ابری دارد و در نتیجه هزینههای بسیار کمتری را به دنبال خواهد داشت.
در کنار تمامی این موارد به کاربرد آسان و ساده ردیس نیز باید اشاره کرد. این امر باعث شده تا توسعهدهندگان تمایل بیشتری به استفاده از آن داشته باشند. از طرف دیگر میتوان گفت Redis از بیشتر زبانهای برنامهنویسی مطرح دنیا پشتیبانی میکند.
زبانهایی مانند جاوا اسکریپت، جاوا، Go، سی، سیپلاسپلاس، سیشارپ، پایتون، آبجکتیو سی و PHP سازگاری خوبی با Redis دارند و در نتیجه میتوان گفت Redis به نیاز طیف وسیعی از توسعهدهندگان پاسخ میدهد.
این موارد باعث شده تا یادگیری و تعامل با ردیس برای توسعهدهندگان سادهتر شود که این امر نیز محبوبیت و کاربرد بیشتر آن را به دنبال داشته است. خوشبختانه فرآیند نصب Redis بسیار ساده است و به راحتی میتوان با تایپ چند دستور آن را نصب و آماده بهرهبرداری کرد.
ویژگیهای ردیس به همینجا ختم نمیشود و متنباز بودن این فناوری در کنار ثبات بالای آن باعث شده است تا هر روز شاهد محبوبیت بیشتر Redis و افزایش بیشتر حضور آن در دنیای فناوریهای نوین باشیم.
سیستم عامل های قابل پشتیبانی:
ردیس به زبانANSI C نوشته شده و با بسیاری از سیستم های Posix مانند خانواده بزرگ لینوکس – یونیکس – BSD ها مانند OpenBSD و FreeBSD و OSx بدون نیاز به پیش نیاز(dependency)خارجی کار می کند.
ردیس توسط شرکت مایکروسافت برای ویندوز نیز آماده شده است.
برخی از مزایای Redis :
رایگان و کدباز
سادگی در استفاده
ماندگاری (persistence) : اطلاعات شما در اثر ریستارت سرور از بین نمی رود!
پشتیبانی از Replication: ردیس به خوبی از Replication پشتیبانی میکند شما میتوانید سرورهای مختلفی را به صورت Master/Slave یا سناریوهای دلخواه خود اجرا کنید.
استفاده از طیف وسیعی از ساختمان داده ها (Data Type)
– سرعت پاسخدهی فوق العاده
معایب: Redis
درست است که Redis با استفاده از ساختارIn-Memory یا مقیم در حافظه کار می کند که باعث سرعت دسترسی و پاسخدهی بسیار عالی می گردد اما حافظه Ram در سرورها و سرورهای ابری (Cloud) معیار اصلی قیمت گذاری است پردازنده و هارد دیسک در معیارهای بعدی هستند.
در نتیجه نیاز زیاد Redis به حافظه می تواند گرانقیت باشد البته درست است که Redis قابلیت استفاده از Virtual memory را دارد اما منجر به استفاده شدیدI/O هارد دیسک می شود.
البته این موارد را نیز می توان با استفاده از Raid های سخت افزاری و دیسک های پرسرعت جامد مانند SSD,NVME برطرف نمود.
توضیحات :
Data Types ساختمان داده ها :
ردیس یک دیتابیس کلید / مقدار است اما این مقدار قرار نیست همیشه یک رشته string باشد ردیس از پنج نوع داده پشتیبانی می کند :
Strings – رشته :
رشته ها میتوانند هر نوع داده ای باشند یک رشته حداکثر از 512 مگابایت پشتیبانی می کند.
Lists – لیست :
لیست ها در واقع مجموعه ای از رشته ها هستند که به ترتیب درج مرتب شده اند میتوان به اول یا انتهای لیست یک عنصر جدید اضافه کرد.
Sets – مجموعه :
مجموعه در واقع کلکسیون بدون ترتیب از رشته ها هستند میتوان در یک مجموعه رشته جدید اضافه یا حذف یا جستجو کرد.
Sorted Sets – مجموعه مرتب :
همانند مجموعه است با این تفاوت که به هر عنصر مجموعه مرتب یک امتیاز تخصیص می یابد.
Hashes – هَش :
هَش در واقع نگاشتی بین کلید و مقدار است و یک رشته جدید بین آن ها قرار می دهد که برای دسترسی به مقدار نیاز به کلید و هش به صورت همزمان است.
![](https://files.virgool.io/upload/users/204877/posts/jv07n1o2k2hm/bdrhdniupgof.jpeg)
زبانهای پشتیبانی شده
زبانهایی که برای آنها کتابخانه کلاینت ردیس وجود دارد، شامل موارد ذیل است: اکشناسکریپت، سی، سی++، سی شارپ، کلوژر، لیسپ معمولی، دارت، ارلنگ، گو، هسکل، هکس، آیاو، جاوا، جاوااسکریپت، لوا، آبجکتیو-سی، پرل، پیاچپی، پیور داتا، پایتون، آر، روبی، اسکالا، اسمالتاک، تیسیال.
استفاده کنندگان و کاربران سرشناس
از کاربران سرشناس ردیس میتوان به موارد زیر اشاره کرد:
گاردین
گیتهاب
استک اورفلو
کریگزلیست
فلیکر
بلیزارد انترتینمنت
بامپ
دیسکاس
دیگ
تصاویری از محیط کار:
![](https://files.virgool.io/upload/users/204877/posts/jv07n1o2k2hm/iaqrp7dt3cfu.jpeg)
![](https://files.virgool.io/upload/users/204877/posts/jv07n1o2k2hm/djbsp9ymhgek.jpeg)
![](https://files.virgool.io/upload/users/204877/posts/jv07n1o2k2hm/ad08d5tgacnl.png)
ممنون از توجهتون…..امید وارم که براتون مفید بوده باشه.