جواد جهانگیری
جواد جهانگیری
خواندن ۲۸ دقیقه·۳ سال پیش

آموزش دیتابیس ردیس Redis Tutorial


به نام آن که جان را فکرت آموخت / چراغ دل به نور جان برافروخت

با عرض سلام و وقت بخیر خدمت کاربران محترم سایت ویرگول، در این مقاله آموزشی که چکیده آموزش Redis از سایت tutorialspoint بهمراه مطالب تکمیلی تر , سعی شده یک آموزش کاربردی و پروژه محور از دیتابیس Redis ارایه گردد.ایده این سری مقاله های آموزشی از این موضوع سرچشمه می گیرد که بخشی از خوانندگان وجود دارد که به محتوای نوشتاری آنلاین بهتر پاسخ می دهند و ترجیج می دهند مهارت های جدید را به سرعت از طریق خواندن افزایش دهند.این سری اموزش ها با ارایه اولین پکیج آموزشی در خصوص Redis آغاز می شود که انتظار می رود با واکنش مثبت کاربران همراه شود.

توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!
تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.
با کمال تشکر جواد جهانگیری
شماره تلفن همراه: 09149431772
نشانی پست الکترونیکی: javad.jahangiri.niopdc@gmail.com
فیلم‌های آموزشی در آپارات:جواد جهانگیری (CTO) - آپارات
فیلم آموزشی در یوتویب: javad jahangiri - YouTube
نسخه مقاله: 2.3 - تاریخ بروزرسانی: 1400/11/04


https://www.aparat.com/javadjahangiriniopdc/playlists


Redis

  • یک دیتابیس اوپن سورس از نوع NoSQL می باشد
  • مخفف Remote Dictionary Server است
  • بصورت جفت های key-value طراحی شده است
  • یک Data Structure Server محسوب می شود
  • فوق العاده سریع می باشد و داده ها رو RAM نگهداری می کند.
  • امکان ذخیره داده هم روی RAM و هم Disk را دارد.
  • دارای امکانات تجاری از قبیل share ding , Cluster, Sentinel, Replication می باشد
  • بیشتر بعنوان یک Distributed Cache مورد استفاده قرار می گیرد
  • اگر بخواهیم بصورت حرفه ای بررسی کنیم تا این لحظه ن بصورت async کار نمی کند و بصورت (Single instance ) کار می کند و اجرای دستورات بصورت async در افزایش پرفورمانس آن زیاد تاثیر گذار نیست
  • با توجه به میزان اندازه داده ها به فضای رم نیازمند هستید
  • در برخی پروژه اگر دیتابیس پروژه کوچک باشد و نیاز به سرعت خیلی بالا باشد می توان بعنوان دیتابیس اصلی پروژه نیز استفاده کرد چون امکاناتی دارد که می تواند داده ها را بصورت پایدار در هارد نیز نگهداری کند
  • کوری های پیشرفته و پیچیده همانند دیتابیس های رابطه ای را پشتیبان نمی کند و در تراکنش ها (transaction) حالت Rollback را پشتیبانی نمی کند و اگر خطای رخ دهد بجای رول بک بقیه دستورات را اجرا می کند.
  • معادل Redis در پروژه های Django می توان به یMemCache اشاره نمود

آموزش نحوه نصب Redis

در ابتدای اموزش می خواهیم نحوه نصب Redis را آموزش دهیم با توجه به اینکه دیتابیس Redis بر روی لینوکس می باشد و با مراجعه به سایت Redis مشاهده می کنید که نسخه رسمی برای ویندوز ارایه نشده است

برای نصب Redis در ویندوز سه روش وجود دارد که با هم بررسی می کنیم

  • استفاده از Microsoft Archive در گیت هاب
  • استفاده از WSL2 در ویندوز 10
  • استفاده از داکر Docker Desktop

روش اول :استفاده از Microsoft Archive در گیت هاب

  • با توجه به اینکه نسخه رسمی از Redis برای ویندوز ارایه نشده است ولی در گیت هاب مایکروسافت ارشیو یک نسخه پورت شده (This is a port for Windows based on Redis) برای توسعه و برنامه نویسی با استفاده از دیتابیس Redis قرار داده شده است این نسخه پورت شده بود و برای مد Product توصیه نمی شود
https://github.com/microsoftarchive/redis

با مراجعه به سایت گیت از این قسمت نسخه نصبی Redis را دانلود و نصب کنید

https://github.com/microsoftarchive/redis/releases

و از اخر این صفحه نسخه msi ان را دانلود و نصب می کنیم

بعد از نصب Redis بصورت یک سرویس به ویندوز اضافه می شود

در نهایت می توانید وارد Command Prompt ویندوز شده و از طریق دستور Redis-cli وارد کنسول Redis شویم:


روش دوم : استفاده از WSL2 در ویندوز 10

ابتدا بایستی windows subsystem for Linux و Virtual Machine platform از قسمت windows Features فعال می کنیم


سپس از طریق لینک زیر نسبت به نصب WSL2 با دستور زیر اقدام می کنید:

wsl --install
https://docs.microsoft.com/en-us/windows/wsl/install

سپس از طریق Microsoft Store نسبت به نصب Ubuntu در ویندوز اقدام می کنیم:

سپس از طریق Microsoft Store نسبت به نصب Windows Terminalدر ویندوز اقدام می کنیم:

در نهایت بعد از اتمام مراحل بایستی مطمن شوید که نسخه WSL2 در سیستم شما فعال شده است که برای این کار مطابق تصویر عمل کنید:

در نهایت وارد کنسول لینوکس ابونتو در محیط ویندوز می شویم :

sudo apt update && apt upgrade

بعد از اتمام بروزرسانی لینوکس برای نصب Redis دستور زیر را در ترمینال وارد می کنیم :

sudo apt install redis-server

ودر پاسخ جواب yes راصادر می کنیم تا Redis در لینوکس اوبنتور در wsl2 ویندوز نصب شود و بعد از اتمام نصب می توانیم از دستور زیر سرور Redis را راه اندازی کنیم:

redis-server


و در نهایت یک تب جدید در ترمینال ابونتو باز می کنیم و از طریق دستور Redis-Cli وارد کنسول Redis می شویم :

نکته :
اگر بخواهیم دیتابیس Redis در لینوکس ابونتو بصورت سرویس در پس زمینه اجرا شود از طریق دستور زیر عمل می کنیم:
sudo service redis-server start


روش سوم نصب و راه اندازی Redis در Docker

روش نصب با داکر برای برنامه نویس توصیه می شود ابتدا وارد سایت docker hub مطابق شکل زیر می شویم و Redis را جستجو می کنیم و از نتایج نسخه official image را پیدا کرده و مطابق مستندات شروع به نصب می کنیم

مطابق اموزش های قبلی برنامه Docker Desktop را اجرا کرده وارد ترمینال ویندوز شده و ایمیج مربوط را pull می کنیم

بعداز پول شده ایمیج می بایستی در لیست ایمیج های داکردسکتاپ ردیس اضافه شده باشد


سپس از روی مستندات ایمیج Redis مطابق دستور زیر عمل می کنیم

docker run -d -p 6379:6379 --name aspnetrun-redis redis

حالا می توانید از طریق دستور زیر چک کنید که Redis بدرستی اجرا شده است

همچنین می توانید از طریق Docker Desktop نیز اجرا شدن صحیح Redis مطمن شوید


نحوه وارد شدن به Redis-cli

از طریق دستور زیر می توایند به محیط اینتر اکتیو مربوط به شل Redis وارد شوید:

docker exec -it aspnetrun-redis /bin/bash


سپس با وارد کردن Redis-cli وارد خط دستورات Redis می شویم و ادامه اموزش شروع به کار با دستورات Redis می کنیم ،همانطور که می دانید دیتابیس Redis بصورت جفت کلیدهای key/value کار می کند برای تست صحیح بودن عملیات یک کلید بنام name با مقدار javad ایجاد کرده و دوباره اطلاعات ان را به شرح ذیل می خوانیم:

برای ذخیره سازی داده ها بصورت عمومی در ردیس ما پنج گزینه در اختیار داریم:

  • string
  • List
  • Set
  • hash
  • Sorted Set

همانگونه که اشاره کردیم Redis یک دیتابیس In Memory می باشد و داده ها را در Ram نگهداری می کند و دارای سرعت خیلی زیادی می باشد ولی یکی از امکاناتی در ردیس داریم امکانات نگهداری داده ها بصورت دایمی می باشد

برای نگهداری داده های ردیس در هارد بصورت دایمی بصورت کلی دو روش داریم

  • روش اول که Point-in-time dump می باشد که در این روش ردیس اطلاعات در بازه های زمانی برای مثال هر ده ثانیه یکبار و یا براساس میزان تغییرات دیتابیس تنظیم می شود برای مثال هر صد تغییر در دیتابیس بر روی هارد ذخیره شود
  • روش دوم که به آن Append-only گفته می شوداز لحظه ای که سرویس ردیس راه اندازی می شود هر تغییری در یک فایل بر روی هارد بصورت فقط افزایشی نوشته می شود در این حالت ردیس یک مقدار کند می شود زیرا باید هر تغییرات از RAM بر روی هارد دیسک نوشته شود که باعث افت پرفورمانس ردیس می شود از سوی دیگر مشکل دیگر این است که اندازه این فایل بصورت خیلی سریع افزایش پیدامی کند که شاید بر روی سرور شما فضای کافی برای نگهداری داده ها موجود نباشد زیرا هر تغییری حتی اگر حذف هم شود در این فایل بصورت یک history نگهداری می شود لذا باعث افزایش تدریجی اندازه این فایل می شود این روش بیشتر بصورت یک log از تغییرات استفاده می شود.

در ادامه اموزش شروع به بررسی دیتابیس Redis می کنیم مطابق اموزش های قبلی بعنوان منبع اموزشی از سایت https://www.tutorialspoint.com استفاده می کنیم:

https://www.tutorialspoint.com/redis/index.htm

Redis - Home

Redis Tutorial

ردیس یه برنامه اوپن سورس با مجوز BSD و در حقیقت یک دخیره ساز پیشرفته key/value می باشد اغلب از آن به عنوان سرور ساختار داده یاد می شود، زیرا کلیدها می توانند شامل رشته ها، هش ها، لیست ها، مجموعه ها و مجموعه های مرتب شده باشند. Redis به زبان C نوشته شده است. این آموزش درک خوبی از مفاهیم Redis، مورد نیاز برای ایجاد و استقرار یک سیستم بسیار مقیاس پذیر و عملکرد محور را ارائه می دهد.

Audience

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

Prerequisites


قبل از ادامه این آموزش، باید دانش اولیه در مورد ساختارهای داده داشته باشید


Redis - Overview

ردیس (Redis) یک برنامه اوپن سورس ، یک منبع ذخیزه پیشرفته بصورت key/value می باشد و یک راه حل مناسب برای ساخت برنامه های کاربردی وب با کارایی بالا و مقیاس پذیر است. Redis دارای سه ویژگی اصلی است که آن را متمایز می کند.

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

Redis Advantages

در زیر مزایای خاصی از Redis بررسی می شود:

  • Exceptionally fast

ردیس بسیار سریع است و می تواند حدود 110000 SET در ثانیه، حدود 81000 GET در ثانیه انجام دهد.

  • Supports rich data types

ردیس بطور بومی از بسیاری از انواع داده هایی که توسعه دهندگان از قبل می شناسند مانند لیست، مجموعه، مجموعه مرتب شده و هش پشتیبانی می کند. این امر حل انواع مشکلات را آسان می کند زیرا می دانیم کدام مشکل با کدام نوع داده بهتر قابل رسیدگی است

  • Operations are atomic

تمام عملیات Redis اتمیک هستند، که تضمین می کند که اگر دو مشتری به طور همروند درخواست دسترسی به داده ای را داشته باشند، سرور Redis مقدار به روز شده (آخرین به روزرسانی )را ارایه می کند

  • Multi-utility tool

ردیس یک ابزار چندکاربردی است و می‌تواند در موارد متعددی مانند ذخیره‌سازی، صف‌های پیام‌رسانی مورد استفاده قرار گیرد (Redis به طور بومی از Publish پشتیبانی می‌کند).

Redis Versus Other Key-value Stores

  • ردیس یک مسیر تکاملی متفاوت در مقایسه با database های از نوع key/values را طی می کند، که در آن مقادیر می‌توانند حاوی انواع داده‌های پیچیده‌تر باشند و عملیات اتمیک روی آن نوع داده‌ها تعریف شده است.
  • ردیس یک پایگاه داده بر روی حافظه است اما می تواند اطلاعات برای ماندگاری رو هارد دیسک هم بنویسد، از این رو نشان دهنده یک معامله متفاوت است که در آن سرعت نوشتن و خواندن بسیار بالا با محدودیت مجموعه داده هایی که نمی توانند بزرگتر از حافظه باشند به دست می آید.
  • مزیت دیگر پایگاه های داده درون حافظه این است که نمایش حافظه ساختارهای داده پیچیده در مقایسه با ساختار داده مشابه روی دیسک بسیار ساده تر است. بنابراین، Redis می تواند کارهای زیادی را با پیچیدگی داخلی کمی انجام دهد.

Redis - Configuration

در Redis، یک فایل پیکربندی (redis.conf) در دایرکتوری ریشه Redis موجود است. اگرچه می توانید تمام تنظیمات Redis را با دستور Redis CONFIG دریافت و تنظیم کنید.

Syntax

Following is the basic syntax of Redis CONFIG command.

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

Example

redis 127.0.0.1:6379> CONFIG GET loglevel 1) &quotloglevel&quot 2) &quotnotice&quot

To get all configuration settings, use * in place of CONFIG_SETTING_NAME

Example

redis 127.0.0.1:6379> CONFIG GET *

Edit Configuration

برای به‌روزرسانی پیکربندی، می‌توانید فایل redis.conf را مستقیماً ویرایش کنید یا می‌توانید تنظیمات را از طریق دستور CONFIG set به‌روزرسانی کنید.

Syntax

Following is the basic syntax of CONFIG SET command.

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

Example

redis 127.0.0.1:6379> CONFIG SET loglevel &quotnotice&quot OK redis 127.0.0.1:6379> CONFIG GET loglevel 1) &quotloglevel&quot 2) &quotnotice&quot

توجه شود ردیس دارای چهار حالت لاگ گیری می باشد

Redis has four log levels: debug, verbose, notice, and warning.

که در این مثال loglevel بر روی notice تنظیم شده است دقت کنید حالت پیش فرض لاگ گیری هم notice می باشد.

Redis - Data Types

ردیس از 5 نوع نوع داده پشتیبانی می کند.

Strings

رشته Redis دنباله ای از بایت است. رشته‌ها در Redis دودویی امن هستند، به این معنی که طول مشخصی دارند و انتهای متن توسط هیچ کاراکتر پایان‌دهنده خاصی تعیین نمی‌شود. بنابراین، شما می توانید هر چیزی تا 512 مگابایت را در یک رشته ذخیره کنید.

Example

redis 127.0.0.1:6379> SET name &quottutorialspoint&quot OK redis 127.0.0.1:6379> GET name &quottutorialspoint&quot

در مثال بالا، SET و GET دستورات Redis هستند، name کلید استفاده شده در Redis و tutorialspoint مقدار رشته ای است که در Redis ذخیره می شود.


نکته:
حداکثر سایز یک رشته در در ردیس 512 مگابایت می باشد و اگر کلیدی حذف شده و یا ایجاد نشده باشد و درخواست شود Redis مقدار (nil) به معنی NULL را برگشت می دهد

Lists

لیست های Redis به سادگی لیستی از رشته ها هستند که بر اساس ترتیب درج مرتب شده اند. می توانید عناصر را در لیست های Redis در head یا tail لیست اضافه کنید. حداکثر طول یک لیست بیش از 4 میلیارد عنصر در هر لیست می باشد.

در حقیقت یک Linked list هستند که برای مطالعه بیشتر به سایت wiki مراجعه نمایید فقط توجه شود در ردیس لیست ها بصورت تک طرفه Singly linked list پیداسازی می شود ولی اگر حضور ذهن داشته باشید در اموزش ها سی شارپ توضیح داده ام که در سی شارپ لیست ها بصورت Doubly linked list می باشد دو جهت بوده و می توان در دو جهت از اول به اخر یا از اخر به اول پیمایش شود.

Example

redis 127.0.0.1:6379> LPUSH tutorials redis (integer) 1 redis 127.0.0.1:6379> LPUSH tutorials mongodb (integer) 2 redis 127.0.0.1:6379> LPUSH tutorials mysql (integer) 3 redis 127.0.0.1:6379> LRANGE tutorials 0 10 1) &quotmysql&quot 2) &quotmongodb&quot 3) &quotredis&quot

Example:


Hashes

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

برای مطالعه بیشتر در مورد hash پیشنهاد می دهم ابتدا اموزش های بنده را در این راستا در آپارات را مطالعه نمایید

https://www.aparat.com/v/UVJ7O
https://www.aparat.com/v/Ya5dg


Example

redis 127.0.0.1:6379> HMSET user:1 username tutorialspoint password tutorialspoint points 200 OK redis 127.0.0.1:6379> HGETALL user:1 1) &quotusername&quot 2) &quottutorialspoint&quot 3) &quotpassword&quot 4) &quottutorialspoint&quot 5) &quotpoints&quot 6) &quot200&quot

در مثال بالا، از نوع داده هش برای ذخیره شی کاربر استفاده می شود که حاوی اطلاعات اولیه کاربر است.در اینجا HMSET، HGETALL دستوراتی برای Redis هستند، در حالی که کلید جستجو user-1 می باشد

Every hash can store up to (more than 4 billion field-value pairs).

لیست های Redis به سادگی لیستی از رشته ها هستند که بر اساس ترتیب درج مرتب شده اند. شما می توانید عناصر را به لیست Redis در head یا tail اضافه کنید.

Example

redis 127.0.0.1:6379> lpush tutoriallist redis (integer) 1 redis 127.0.0.1:6379> lpush tutoriallist mongodb (integer) 2 redis 127.0.0.1:6379> lpush tutoriallist rabitmq (integer) 3 redis 127.0.0.1:6379> lrange tutoriallist 0 10 1) &quotrabitmq&quot 2) &quotmongodb&quot 3) &quotredis&quot

The max length of a list is 4294967295, more than 4 billion of elements per list

Sets

مجموعه‌های Redis مجموعه‌ای نامرتب از رشته‌ها هستند. در Redis، می توانید اضافه کنید، حذف کنید، و وجود اعضا را در پیچیدگی زمانی O(1) آزمایش کنید.

Example

redis 127.0.0.1:6379> sadd tutoriallist redis (integer) 1 redis 127.0.0.1:6379> sadd tutoriallist mongodb (integer) 1 redis 127.0.0.1:6379> sadd tutoriallist rabitmq (integer) 1 redis 127.0.0.1:6379> sadd tutoriallist rabitmq (integer) 0 redis 127.0.0.1:6379> 1) &quotrabitmq&quot 2) &quotmongodb&quot 3) &quotred

نکته:
در مثال بالا، rabbitmq دو بار اضافه شده است، اما به دلیل ویژگی منحصر به فرد مجموعه(set عضو تکراری را ثبت نمی کند)، تنها یک بار اضافه می شود.

The max number of members in a set is 4294967295, more than 4 billion of members per set.

Sorted Sets

مجموعه‌های مرتب‌شده Redis مشابه مجموعه‌های Redis هستند، مجموعه‌های غیر تکراری رشته‌ها. تفاوت این است که هر عضو یک مجموعه مرتب شده با یک امتیاز همراه است که برای گرفتن مجموعه مرتب شده از کوچکترین به بزرگترین امتیاز استفاده می شود. در حالی که اعضا منحصر به فرد هستند، امتیازها ممکن است تکرار شوند.

redis 127.0.0.1:6379> zadd tutoriallist 0 redis (integer) 1 redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq (integer) 1 redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq (integer) 0 redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 1000 1) &quotredis&quot 2) &quotmongodb&quot 3) &quotrabitmq&quot

How To Manage Redis Databases

ردیس دارای 16 دیتابیس می باشد که از شماره 0 تا 15 شماره گذاری شده است و بصورت پیش فرض در هنگام اتصال به ردیس اطلاعات در دیتابیس شماره 0 ذخیره می شود

از طریق دستور select می توانیم دیتابیس مورد نظر را انتخاب کنیم


To swap all the data held in one database with the data held in another

از طریق دستور swapdb می توان تمامی داده های موجود در یک دیتابیس را ردیس را به دیتابیس دیگر ردیس منتقل کردد

swapdb 15 14


Redis Commands

Redis - Commands

دستورات Redis برای انجام برخی عملیات روی سرور Redis استفاده می شود. برای اجرای دستورات روی سرور Redis، به یک کلاینت Redis نیاز دارید. کلاینت Redis در پکیج ردیس موجود است که قبلاً آن را نصب کرده ایم.
Syntax

Following is the basic syntax of Redis client.

$redis-cli

Example

مثال زیر توضیح می دهد که چگونه می توانیم مشتری Redis را راه اندازی کنیم. برای راه اندازی مشتری Redis، ترمینال را باز کرده و دستور redis-cli را تایپ کنید. این به سرور محلی شما متصل می شود و اکنون می توانید هر دستوری را اجرا کنید.

$redis-cli redis 127.0.0.1:6379> redis 127.0.0.1:6379> PING PONG

در مثال بالا، ما به سرور Redis در حال اجرا در ماشین محلی متصل می شویم و یک دستور PING را اجرا می کنیم که بررسی می کند آیا سرور در حال اجرا است یا خیر.

Run Commands on the Remote Server

برای اجرای دستورات روی سرور راه دور Redis، باید توسط همان کلاینت redis-cli به سرور متصل شوید.

Syntax

$ redis-cli -h host -p port -a password

Example

مثال زیر نحوه اتصال به سرور از راه دور Redis را نشان می دهد که روی هاست 127.0.0.1 اجرا می شود، پورت 6379 و دارای رمز عبور mypass است.

$redis-cli -h 127.0.0.1 -p 6379 -a &quotmypass&quot redis 127.0.0.1:6379> redis 127.0.0.1:6379> PING PONG


Redis - Keys

دستورات Redis keys برای مدیریت کلیدها در Redis استفاده می شود. در زیر نحوه استفاده از دستورات کلیدهای redis آمده است.

Syntax

redis 127.0.0.1:6379> COMMAND KEY_NAME

Example

redis 127.0.0.1:6379> SET tutorialspoint redis OK redis 127.0.0.1:6379> DEL tutorialspoint (integer) 1

در مثال بالا، DEL فرمان است، در حالی که tutorialspoint کلید است. اگر کلید حذف شود، خروجی دستور (عدد صحیح) 1 و در غیر این صورت (عدد صحیح) 0 خواهد بود.

Rename Keys

برای تغییر نام یک کلید از دستور زیر استفاده می کنیم

rename old_key new_key



Redis Keys Commands

Following table lists some basic commands related to keys.

در ردیس expire برای مشخص کردن زمان از بین رفتن یک کلید براساس ثانیه می باشد و ttl نیز زمان باقیمانده برای از بین رفتن کلید را نمایش می دهد اگر عدد -2 را نمایش دهد به معنی key does not exis می باشد یعنی کلید حذف شده است و اگر عدد -1 نمایش دهد key exists but has no associated expire به معنی کلید وجود دارد و زمان ان منقضی نشده است(حالت نرمال در ttl عدد -1 را نمایش می دهد )


redis> SET mykey &quotHello&quot &quotOK&quot redis> EXPIRE mykey 10 (integer) 1 redis> TTL mykey (integer) 10 redis>


Redis - Strings

دستورات رشته های Redis برای مدیریت مقادیر رشته در Redis استفاده می شود. در زیر نحوه استفاده از دستورات رشته Redis آمده است.

Syntax

redis 127.0.0.1:6379> COMMAND KEY_NAME

Example

redis 127.0.0.1:6379> SET tutorialspoint redis OK redis 127.0.0.1:6379> GET tutorialspoint &quotredis&quot

In the above example, SET and GET are the commands, while tutorialspoint is the key.

Redis Strings Commands

Following table lists some basic commands to manage strings in Redis.

Redis - Hashes
هش های ردیس برای مپ کردن بین فیلدهای رشته و مقادیر رشته هستند. از این رو، آنها بهترین نوع داده برای نمایش اشیا هستند. در ردیس، هر هش می تواند بیش از 4 میلیارد جفت فیلد-مقدار را ذخیره کند

Example

redis 127.0.0.1:6379> HMSET tutorialspoint name &quotredis tutorial&quot description &quotredis basic commands for caching&quot likes 20 visitors 23000 OK redis 127.0.0.1:6379> HGETALL tutorialspoint 1) &quotname&quot 2) &quotredis tutorial&quot 3) &quotdescription&quot 4) &quotredis basic commands for caching&quot 5) &quotlikes&quot 6) &quot20&quot 7) &quotvisitors&quot 8) &quot23000&quot

در مثال بالا، جزئیات آموزش های Redis (نام، توضیحات، لایک ها، بازدیدکنندگان) را به صورت هش با نام "tutorialspoint" تنظیم کرده ایم.

Redis Hash Commands

Following table lists some basic commands related to hash.

Redis - Lists

لیست های Redis به سادگی لیستی از رشته ها هستند که بر اساس ترتیب درج مرتب شده اند. می توانید عناصر را در لیست های Redis در head یا tail لیست اضافه کنید. حداکثر طول یک لیست 2^32 - 1 عنصر است (4294967295، بیش از 4 میلیارد عنصر در هر لیست).

Example

redis 127.0.0.1:6379> LPUSH tutorials redis (integer) 1 redis 127.0.0.1:6379> LPUSH tutorials mongodb (integer) 2 redis 127.0.0.1:6379> LPUSH tutorials mysql (integer) 3 redis 127.0.0.1:6379> LRANGE tutorials 0 10 1) &quotmysql&quot 2) &quotmongodb&quot 3) &quotredis&quot

در مثال بالا، سه مقدار با دستور LPUSH در لیست Redis به نام "آموزش" درج شده است.

Redis Lists Commands

Following table lists some basic commands related to lists.

Redis - Sets

مجموعه‌های Redis مجموعه‌ای نامرتب از رشته‌های منحصربه‌فرد هستند. منحصر به فرد به این معنی است که مجموعه ها اجازه تکرار داده ها را در یک کلید نمی دهند. در مجموعه Redis وجود اعضا را در O(1) اضافه، حذف و آزمایش کنید (زمان ثابت بدون توجه به تعداد عناصر موجود در مجموعه). حداکثر طول یک لیست 2^32 - 1 عنصر است (4294967295، بیش از 4 میلیارد عنصر در هر مجموعه).

Example

redis 127.0.0.1:6379> SADD tutorials redis (integer) 1 redis 127.0.0.1:6379> SADD tutorials mongodb (integer) 1 redis 127.0.0.1:6379> SADD tutorials mysql (integer) 1 redis 127.0.0.1:6379> SADD tutorials mysql (integer) 0 redis 127.0.0.1:6379> SMEMBERS tutorials 1) &quotmysql&quot 2) &quotmongodb&quot 3) &quotredis&quot

در مثال بالا، با دستور SADD، سه مقدار در مجموعه Redis با نام "tutorials" درج شده است.

Redis Sets Commands

Following table lists some basic commands related to sets.

Redis - Sorted Sets

مجموعه‌های مرتب‌شده Redis مشابه مجموعه‌های Redis با ویژگی منحصربه‌فرد مقادیر ذخیره‌شده در یک مجموعه هستند. تفاوت این است که هر عضو یک مجموعه مرتب شده با یک امتیاز همراه است که برای گرفتن مجموعه مرتب شده از کوچکترین به بزرگترین امتیاز استفاده می شود. در مجموعه مرتب‌سازی شده Redis، وجود اعضا را در O(1) اضافه، حذف و آزمایش کنید (زمان ثابت بدون توجه به تعداد عناصر موجود در مجموعه). حداکثر طول یک لیست 2^32 - 1 عنصر است (4294967295، بیش از 4 میلیارد عنصر در هر مجموعه).

Example

redis 127.0.0.1:6379> ZADD tutorials 1 redis (integer) 1 redis 127.0.0.1:6379> ZADD tutorials 2 mongodb (integer) 1 redis 127.0.0.1:6379> ZADD tutorials 3 mysql (integer) 1 redis 127.0.0.1:6379> ZADD tutorials 3 mysql (integer) 0 redis 127.0.0.1:6379> ZADD tutorials 4 mysql (integer) 0 redis 127.0.0.1:6379> ZRANGE tutorials 0 10 WITHSCORES 1) &quotredis&quot 2) &quot1&quot 3) &quotmongodb&quot 4) &quot2&quot 5) &quotmysql&quot 6) &quot4&quot

در مثال بالا، سه مقدار به همراه امتیاز آن در مجموعه مرتب‌سازی شده Redis به نام «آموزش» با دستور ZADD درج شده است.

Redis Sorted Sets Commands

Following table lists some basic commands related to sorted sets.

Redis - HyperLogLog

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

این الگوریتم HyperLogLog تقریب بسیار خوبی از کاردینالیته یک مجموعه حتی با استفاده از مقدار بسیار کمی از حافظه در حدود 12 کیلوبایت در هر کلید با خطای استاندارد 0.81٪ ارائه می دهد. هیچ محدودیتی برای تعداد مواردی که می توانید بشمارید وجود ندارد، مگر اینکه به ^642 مورد نزدیک شوید.

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


Example

Following example explains how Redis HyperLogLog works.

redis 127.0.0.1:6379> PFADD tutorials &quotredis&quot 1) (integer) 1 redis 127.0.0.1:6379> PFADD tutorials &quotmongodb&quot 1) (integer) 1 redis 127.0.0.1:6379> PFADD tutorials &quotmysql&quot 1) (integer) 1 redis 127.0.0.1:6379> PFCOUNT tutorials (integer) 3

Redis HyperLogLog Commands

Following table lists some basic commands related to Redis HyperLogLog.

Redis - HyperLogLog Pfadd Command

دستور Redis PFADD تمام آرگومان های عنصر را به ساختار داده HyperLogLog که در نام کلید مشخص شده به عنوان اولین آرگومان ذخیره شده است اضافه می کند.

Return Value

Integer reply, 1 or 0.

Syntax

Following is the basic syntax of Redis PFADD command.

redis 127.0.0.1:6379> PFADD KEY_NAME ELEMENTS_TO_BE_ADDED

Example

redis 127.0.0.1:6379> PFADD mykey a b c d e f g h i j (integer) 1 redis 127.0.0.1:6379> PFCOUNT mykey (integer) 10


Redis - HyperLogLog Pfcount Command

دستور Redis PFCOUNT برای به دست آوردن کاردینالیتی تقریبی محاسبه شده توسط ساختار داده HyperLogLog ذخیره شده در متغیر مشخص شده استفاده می شود. اگر کلید وجود نداشته باشد، 0 را برمی گرداند.

Return Value

Integer reply, approximated number of unique elements.

When PFCOUNT command is used with multiple keys, then it returns approximated cardinality of the union of the HyperLogLogs.

Syntax

Following is the basic syntax of Redis PFCOUNT command.

redis 127.0.0.1:6379> PFCOUNT KEY1 KEY@... KEYN

Example

redis 127.0.0.1:6379> PFADD mykey a b c d e f g h i j (integer) 1 redis 127.0.0.1:6379> PFCOUNT mykey (integer) 10 redis 127.0.0.1:6379> PFCOUNT mykey (integer) 10 redis 127.0.0.1:6379> PFCOUNT mykey mynewkey (integer) 10

Redis - HyperLogLog Pfmerge Command

دستور Redis PFMERGE برای ادغام چندین مقدار HyperLogLog در یک مقدار منحصر به فرد استفاده می‌شود که تقریباً اصلی بودن اتحاد مجموعه‌های مشاهده‌شده ساختارهای HyperLogLog مبدا را نشان می‌دهد.

Return Value

Simple string reply OK.

Syntax

Following is the basic syntax of Redis PFMERGE command.

redis 127.0.0.1:6379> PFMERGE KEY1 KEY@... KEYN

Example

redis 127.0.0.1:6379> PFADD hll1 foo bar zap a (integer) 1 redis 127.0.0.1:6379> PFADD hll2 a b c foo (integer) 1 redis 127.0.0.1:6379> PFMERGE hll3 hll1 hll2 OK redis 127.0.0.1:6379> PFCOUNT hll3 (integer) 6

Redis - Publish Subscribe

درRedis Pub/Sub سیستم پیام رسانی را پیاده سازی می کند که در آن فرستنده در اصطلاح redis به نام ناشر(publishers) پیام ها را ارسال می کند در حالی که گیرندگان مشترکین(subscribers) آنها را دریافت می کنند. لینکی که پیام ها توسط آن منتقل می شوند کانال (channel) نامیده می شود.

در Redis، مشتری می تواند هر تعداد کانال را مشترک کند.

Example

مثال زیر نحوه عملکرد مفهوم مشترک را توضیح می دهد. در مثال زیر، یکی از مشتریان کانالی به نام «redisChat» را مشترک می‌کند

redis 127.0.0.1:6379> SUBSCRIBE redisChat Reading messages... (press Ctrl-C to quit) 1) &quotsubscribe&quot 2) &quotredisChat&quot 3) (integer) 1

اکنون، دو مشتری پیام‌ها را در یک کانال به نام «redisChat» منتشر می‌کنند و مشتری مشترک بالا در حال دریافت پیام است.

redis 127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"
(integer) 1
redis 127.0.0.1:6379> PUBLISH redisChat "Learn redis by tutorials point"
(integer) 1
1) "message"
2) "redisChat"
3) "Redis is a great caching technique"
1) "message"
2) "redisChat"
3) "Learn redis by tutorials point"

Redis PubSub Commands

Following table lists some basic commands related to Redis Pub/Sub.

Redis - Transactions

تراکنش های Redis امکان اجرای گروهی از دستورات را در یک مرحله واحد فراهم می کند. در زیر دو ویژگی تراکنش ها آورده شده است.

  • تمام دستورات در یک تراکنش به صورت متوالی به عنوان یک عملیات مجزا اجرا می شوند. این امکان وجود ندارد که درخواستی که توسط مشتری دیگری صادر شده است در میانه اجرای تراکنش Redis اجرا شود.
  • تراکنش Redis نیز اتمی است. اتمی به این معنی است که یا همه دستورات پردازش نمی شوند یا هیچ کدام

Sample

تراکنش Redis با دستور MULTI آغاز می شود و سپس باید لیستی از دستوراتی را که باید در تراکنش اجرا شوند ارسال کنید و پس از آن کل تراکنش با دستور EXEC اجرا می شود.

redis 127.0.0.1:6379> MULTI OK List of commands here redis 127.0.0.1:6379> EXEC

Example

Following example explains how Redis transaction can be initiated and executed.

redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> SET tutorial redis QUEUED redis 127.0.0.1:6379> GET tutorial QUEUED redis 127.0.0.1:6379> INCR visitors QUEUED redis 127.0.0.1:6379> EXEC 1) OK 2) &quotredis&quot 3) (integer) 1

Redis Transaction Commands

Following table shows some basic commands related to Redis transactions.

در دیتابیس‌های رابطه ای جهت اجرای چندین دستور اعم از ایجاد، به‌روزرسانی و حذف، از تراکنش یا Transaction ها استفاده می‌شود. هر تراکنش باید قوانین ACID را رعایت کند، در غیر اینصورت قابل‌اجرا نمی‌باشد. این قوانین با استفاده از نوعی سیستم قفل گذاری پیاده سازی شده‌اند.
قوانین ACID شامل موارد ذیل است که باید در تراکنش دیتابیس‌های رابطه ای رعایت گردد:
• Atomicity: این خاصیت که به خاصیت همه یا هیچ معروف است، بیانگر این است که یک تراکنش یا باید به طور کامل اجرا شود یا اصلا اجرا نشود. برای مثال اگر در یک تراکنش سه عملیات مختلف انجام گیرد، یا هر سه این عملیات باید تا پایان تراکنش به صورت کامل انجام شوند یا هیچ کدام از آن‌ها انجام نشوند. دستورات باید به ترتیب و سریالی انجام گیرند و در صورتی که مشکلی در سیستم به وجود آمد (مثلا برق قطع شد)، سیستم باید بعد از اتصال دوباره، عملیات ها را Rollback نماید، به این ترتیب که گویا هیچ کدام از دستورات صورت نگرفته است.
• Consistency: برای درک درست مفهوم سازگاری، مثال تراکنش های بانک را در نظر بگیرید. در یک سیستم حسابداری بانک، مجموعه پول های انتقالی بین بانک باید ثابت باشد. در نظر بگیرید که مثلا اگر ۵۰ هزار تومان از حساب کاربری A به حساب کاربری B منتقل شد، مجموعه پول های موجود در بانک تغییر نخواهد کرد. این همان مفهوم سازگاری است. یعنی یک تراکنش، دیتابیس را از یک حالت سازگار به یک حالت سازگار دیگر انتقال می‌دهد.
• Isolation: فرض کنید در یک دیتابیس، چندین تراکنش با یکدیگر در حال اجرا هستند. هر تراکنش نباید از اجرای دیگر تراکنش ها مطلع شود. یعنی این تراکنش ها باید طوری اجرا شوند که انگار، فقط همین یک تراکنش در حال اجرا در کل دیتابیس است.
• Durability : به این معناست که یک تراکنش بعد از اتمام، باید در حافظه باقی بماند. یعنی اگر یک تراکنش با موفقیت به اتمام رسید، نتایج کار، با قطع برق یا اتفاق های دیگر از بین نرود.

تراکنش در Redis

ردیس از قوانین ACID فقط دو قانون یعنی Isolationو Atomicityرا رعایت می‌کند و قوانین دیگر را بر عهده برنامه‌نویس می‌گذارد.

Redis با استفاده از دستورات زیر که در دو بخش است ، تراکنش ها را مدیریت و اجرا می‌کند.
1. MULTI, EXEC, DISCARD – دستوراتی جهت ورود به تراکنش و خروج از آن.
2. WATCH, UNWATCH – مشاهده یک کلید خاص جهت تغییرات آن توسط client های دیگر.

نحوه استفاده از تراکنش در Redis

تراکنش با دستور MULTI شروع می‌شود، این دستور همیشه پاسخ "OK" را برگشت می‌دهد. سپس دستورات وارد شده بعد از آن صف بندی می‌شوند و با دستور EXEC دستورات موجود در صف به ترتیب اجرا می‌شوند و تراکنش پایان می‌یابد
در صورت استفاده از DISCARD به جای EXEC کل دستورات موجود در صف حذف شده و تراکنش پایان می‌یابد.
همان‌طور که در شکل زیر قابل‌مشاهده است پاسخ EXEC یک آرایه است و هر کدام از مقادیر آرایه نتیجه اجرای هر کدام از دستورات است و چون دستورات به صورت ترتیبی انجام می‌گیرد ترتیب مقادیر آرایه نیز با ترتیب اجرای دستورات هماهنگ است.

نمونه‌ای از کد تراکنش در ردیس را مشاهده کنید :

$ret = $redtis->multi( ) ->set('key1', ‘val1') ->get('keyl1' ) ->set('key2', ‘val2') ->get('key2' ) ->exec( ); /* $ret == Array( 0 => TRUE, 1 => 'val1', 2 => TRUE, 3 => ‘val2' ); */

در صورتی که یک client با سرور ردیس ارتباط داشته باشد استفاده از دستورات بالا صحیح می‌باشد ولی اگر چند client با سرور در ارتباط باشند احتمال خرابی داده موجود در سرور وجود دارد. جهت جلوگیری از خرابی داده می‌باید از WATCH , UNWATCH استفاده کرد.

دستور WATCH جهت مشاهده تغییرات کلید خاص توسط client های دیگر استفاده می‌شود و دستور UNWATCH برای پاک کردن مشاهدات client موجود استفاده می‌گردد.

$redis->watch( 'x'); $ret = $redis->multi( ) ->incr('x') ->exec(); /* $ret = FALSE if x has been modifted between the call to WATCH and the call to EXEC. */

در شکل بالا اگر کلید "x" توسط client دیگری watch شده بود و در حال استفاده بود، نتیجه False برمی گرداند و تراکنش مورد نظر می­ بایست در زمان دیگری اجرا گردد تا اگر client مورد نظر کلید "x" را رها (UNWATCH) کرده بود تراکنش اجرا گردد.

خطاها و مدیریت آن­ها

در طول یک تراکنش امکان رخداد دو نوع خطا وجود دارد که در ادامه به آن‌ها خواهیم پرداخت.

• ممکن است یک دستور در صف قرار نگیرد ، بنابراین ممکن است قبل از فراخوانی دستور EXEC خطایی رخ دهد. به عنوان مثال دستور وارد شده اشتباه باشد (تعداد آرگومان اشتباه ، نام فرمان اشتباه و ...) یا ممکن است شرایط بحرانی مانند پر شدن حافظه وجود داشته باشد (اگر تنظیم سرور برای maxmemory تنظیم شده باشد). که در این صورت داده مورد نظر خراب نشده و تا اینجا Consistency رعایت می‌شود.

• یک خطا ممکن است پس از فراخوانی EXEC اتفاق بیافتد. به عنوان مثال از آنجا که ما عملیاتی را بر روی یک کلید با مقدار اشتباه انجام دادیم (مانند فراخوانی یک عملیات لیست در برابر یک مقدار رشته). در شکل زیر این خطا را ملاحظه می فرمایید.

> MULTI OK > set x &quotabc&quot QUEUED > lpop a QUEUED > EXEC +0K -ERR Operation against a key holding the wrong kind of value

دستور EXEC پاسخ دو رشته عناصر را بر می گرداند که یکی "OK" و پاسخ دیگری ERR است که وظیفه ی برنامه‌نویس یافتن راه حلی منطقی برای کنترل خطا و انتقال آن به کاربر است.
توجه به این نکته مهم است که حتی هنگامی که یک فرمان دچار مشکل می‌شود، تمام دستورات دیگر در صف پردازش قرار می‌گیرند و Redis مانع پردازش دستورات نمی‌شود. که این موجب عدم رعایت Consistency یا سازگاری در اطلاعات می‌گردد.

صرف نظر از صف دستورات

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

> set x 1 OK > multi OK > incr x QUEUED > discard OK > get x &quot1&quot

عدم پشتیبانی Redis از Rollback

در صورتی که تجربه کار با دیتابیس‌های رابطه ای را دارید، این که دستورات Redis می‌توانند در طول یک تراکنش دچار مشکل شوند، اما Redis به جای Rollback کردن آن‌ها، مابقی دستورات را اجرا می‌کند، ممکن است برای شما عجیب به نظر برسد.
با این وجود دلایل خوبی برای این رفتار وجود دارد:

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

Redis - Scripting

اسکریپت Redis برای ارزیابی اسکریپت ها با استفاده از مفسر Lua استفاده می شود. از نسخه 2.6.0 در Redis ساخته شده است. دستور مورد استفاده برای اسکریپت نویسی دستور EVAL است.

Syntax

Following is the basic syntax of EVAL command.

redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

Example

Following example explains how Redis scripting works.

redis 127.0.0.1:6379> EVAL &quotreturn {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}&quot 2 key1 key2 first second 1) &quotkey1&quot 2) &quotkey2&quot 3) &quotfirst&quot 4) &quotsecond&quot

Redis Scripting Commands

Following table lists some basic commands related to Redis Scripting.







این مقاله اموزش هنوز تمام نشده است و درحین تهیه می باشد !!!

با تشکر از مطالعه این مقاله، مثل همیشه کنجکاو باشید!!!

در دوره های آموزش آنلاین تضمینی مجتمع فنی ارومیه که به صورت خصوصی و عمومی در دو شیوه حضوری و آنلاین برگزار می شود سرفصل های بسیار متنوع و کاربردی را بصورت پروژه محور آموزش داده می شود تا شخص کارآموز بتواند بلافاصله پس از اتمام این دوره در کمترین زمان ممکن وارد بازار کار شود.
آموزش تخصص ماست با ما حرفه ای شوید
جهت مشاوره با شماره 09149431772 در ارتباط باشید ...
https://www.aparat.com/javadjahangiriniopdc/playlists


آموزش دیتابیس redisجواد جهانگیریمجتمع فنی ارومیهآموزش برنامه نویسی در ارومیهاستخدام برنامه نویس در ارومیه
بنده دارای مدارک بین المللی شبکه ,برنامه نویسی, سرورهای ویندوزی و لینوکس هستم بیش از ده سال سابقه تدریس در زمینه های یاد شده را دارم. آموزش تخصص ماست با ما حرفه ای شوید 09149431772 مجتمع فنی ارومیه
شاید از این پست‌ها خوشتان بیاید