<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های amirahmad eslampanah</title><link>https://virgool.ir/feed/@amirahmadeslampanah</link><description></description><language>fa</language><pubDate>2026-11-12 16:38:41</pubDate><image><url>https://files.virgool.ir/upload/users/496935/avatar/avatar.png</url><title>amirahmad eslampanah</title><link>https://virgool.ir/@amirahmadeslampanah</link></image><item><title>ریزپردازنده‌ آرم(ARM) - دانشگاه صدرا - استاد داود یعقوبی تبار - درس ریزپردازنده</title><link>https://virgool.ir/@amirahmadeslampanah/ریزپردازنده-آرمarm-دانشگاه-صدرا-استاد-داود-یعقوبی-تبار-درس-ریزپردازنده-nck9ahs45nbw</link><description>پردازنده‌های آرم چیست؟آرم هولدینگز (ARM Holdings plc) یک شرکت نیمه‌هادی سطح اول است که محصولات آن پردازنده‌ها، سیستم‌های برون‌تراشه‌ای (System-on-Chips)، نرم‌افزارهای کامپیوتری و غیره است. معماری آرم یا ARM که مخفف Advanced RISC Machine به معنی ماشین‌های RISC پیشرفته است، در سال 1990 ساخته شد RISC یا ریسک، مخفف Reduced Instruction Set Computer به معنی رایانه کم‌دستور و نوع معماری ساخت کامپیوتر یا ریزپردازنده است که در آن به جای استفاده از دستورالعمل‌های خاص سایر معماری‌ها، از یک مجموعه دستورالعمل حداقلی و بسیار بهینه‌سازی شده‌ استفاده می‌شود. ریسک (RISC) اصلی‌ترین استراتژی طراحی CPU است که در پردازنده‌های آن اجرا می‌شود.آرم ارائه دهنده پیشرو ریزپردازنده‌های مبتنی بر RISC و سایر IP‌های نیمه‌هادی با بیش از 85 میلیارد تراشه مبتنی بر ARM است. ARM مانند سایر شرکت‌های تولید ریزپردازنده همچون اینتل (Intel)، هیتاچی (Hitachi)، فری‌اسکیل (Freescale) و غیره، پردازنده یا سایر ادوات نیمه‌هادی را تولید نمی‌کند بلکه، به عنوان مالکیت فکری (IP) مجوز ساخت هسته‌های نیمه‌هادی را به سایر شرکت‌های نیمه‌هادی مانند اتمل (ATMEL)، فیلیپس (اکنون NXP)، سامسونگ (Samsung) و غیره می‌دهد. مهم‌ترین مالکیت‌های فکری ARM شامل ریزپردازنده‌های RISC توان‌پایین، کم‌هزینه و با کارایی بالا، سیستم‌ برون‌تراشه‌ای و سایر لوازم جانبی است.جدا از پردازنده‌ها و مالکیت فکری هسته‌ها، ARM ابزارهای توسعه نرم‌افزاری کاملی مانند Keil و DS-5 را برای توسعه سیستم‌های کامل مبتنی بر میکروکنترلر ARM و سیستم‌ برون‌تراشه‌ای ارائه می‌دهد.امروزه پردازنده‌های ARM تقریباً در هر زمینه‌ای مانند دستگاه‌های الکترونیکی دستی، دستگاه‌های برقی، رباتیک، اتوماسیون و غیره یافت می‌شوند. پردازنده‌های تولید شده از مالکیت فکری ARM در سیستم‌های تعبیه شده یا توکار یا نهفته (Embedded) مانند تلویزیون‌های هوشمند، ساعت‌های هوشمند، تبلت‌ها و غیره استفاده می‌شوند.ویژگی‌های ریزپردازنده‌های ARMپردازنده‌های ARM مبتنی بر معماری رایانه کم‌دستور یا ریسک (RISC) هستند، اما بر اساس الزامات سیستم‌های تعبیه شده، برخی از اصلاحات نیز در معماری RISC انجام می‌شود. پردازنده‌های ARM معماری نوع انتقال داده (Load-Store) را دنبال می‌کنند که پردازش داده‌ها فقط بر روی محتویات ثبات‌ها یا رجیسترها انجام می‌شود و نه مستقیماً روی حافظه. دستورالعمل پردازش داده‌ها در رجیسترها با دسترسی به حافظه متفاوت است.مجموعه دستورالعمل ARM یکنواخت و طول آن ثابت است. پردازنده‌های آرم ۳۲بیتی دو مجموعه دستورالعمل دارند: به طور کلی، مجموعه دستورالعمل آرم ۳۲ بیتی و مجموعه دستورالعمل Thumb با ۱۶ بیت است (Thumb شیوه‌ای برای فشرده‌سازی دستورات پرکاربرد 32 بیتی به صورت 16 بیتی جهت کاهش حجم برنامه، در ازای کاهش سرعت اجرای آن است).پردازنده ARM از چندین مرحله خط لوله (Pipeline) برای سرعت بخشیدن به جریان دستورالعمل‌ها پشتیبانی می‌کند. در خط لوله سه‌مرحله‌ای ساده، دستورالعمل‌ها از سه مرحله پیروی می‌کنند: واکشی (fetch)، رمزگشایی (decode) و اجرا (execute).برخی از ویژگی‌های عمومی ARM به شرح زیر هستند:پردازنده‌های ARM از سرعت مناسب نسبت به توان مصرفی برخوردار هستند.طیف فرکانس ساعت (کلاک) میکروپروسسورهای ARM گسترده و از ۱ مگاهرتز تا چند گیگاهرتز است.از اجرای مستقیم کدهای جاوا با استفاده از Java  Jazelle DBX ARM پشتیبانی می‌کنند.پردازنده‌های ARM به صورت سخت‌افزاری برای اشکال‌زدایی(Debugging) ساخته شده‌اند.از دستورالعمل‌های پیشرفته برای عملیات پردازش سیگنال دیجیتال یا DSP بهره می‌برند.خانواده‌های پردازنده آرمآرم دارای چندین خانواده پردازنده است که بر اساس هسته پردازشی که با آن‌ پیاده‌سازی شده‌اند، تقسیم می‌شود. معماری پردازنده‌های ARM با تکامل در هر خانواده ادامه دارد. برخی از خانواده‌های معروف پردازنده آرم، عبارتند از: ARM10 ،ARM9 ،ARM7 و ARM11. در جدول زیر تعدادی از خانواده‌های رایج ARM در کنار معماری آن‌ها ارائه شده است.برای توصیف پیاده‌سازی پردازنده‌ها در ARM از نامگذاری مشابه شکل زیر استفاده می‌شود:حروف یا کلمات بعد از “ARM” برای نشان دادن ویژگی‌های پردازنده استفاده می‌شود.x – خانواده یا سریy – واحد مدیریت/حفاظت از      حافظهz – حافظه نهاندیکدر Thumb شانزده بیتی(T): پردازنده‌های ARM از      هر دو مجموعه دستورالعمل 32 بیتی ARM و مجموعه دستورالعمل Thumb شانزده بیتی پشتیبانی می‌کنند. دستورالعمل‌های اصلی 32 بیتی ARM شامل کدهای دستور آپ‌کدهای 32 بیتی است که به نوبه خود الگوی باینری 4 بایتی است.دستورالعمل‌های Thumb شانزده      بیتی شامل کدهای 16 بیتی یا الگوی باینری 2 بایتی برای بهبود تراکم کد است.اشکال‌زدایی JTAG :(D)JTAG یک پروتکل سریال است که توسط ARM برای انتقال اطلاعات اشکال‌زدایی یا دیباگ بین پردازنده و تجهیز تست استفاده می‌شود.ضرب‌کننده سریع(M): پردازنده‌های      قدیمی ARM از      یک واحد ضرب‌‌کننده کوچک و ساده استفاده می‌کردند. این واحد ضرب‌کننده برای      تکمیل یک ضرب‌کنندگی به سیکل ساعت بیشتری نیاز دارد. با وجود واحد ضرب‌کننده      سریع (Fast      Multiplier)، سیکل‌های ساعت مورد نیاز برای ضرب به      طور قابل توجهی کاهش می‌یابد و پردازنده‌های مدرن ARM قادر      به محاسبه ضرب ۳۲     بیتی در یک سیکل واحد هستند.شبیه‌ساز درون‌مدار (ICE) تعبیه      شده ماکروسل (Macrocell) (I): پردازنده‌های ARM دارای سخت‌افزار اشکال‌زدایی بر روی تراشه هستند که به پردازنده اجازه می‌دهد breakpoints و watchpoints را تنظیم یا Set کند.دستورالعمل‌های پیشرفته برای DSP (فرض TDMI): پردازنده‌های ARM در      این مُد از مجموعه دستورالعمل تعمیم یافته DSP برای برنامه‌های DSP با کارایی بالا پشتیبانی می‌کنند. با استفاده از این دستورالعمل‌های DSP تعمیمی، می‌توان عملکرد DSP پردازنده‌های ARM را بدون فرکانس‌های ساعت بالا افزایش داد.فناوری Jazelle (J)(برای اجرای      سریع JAVA): از پردازنده‌های ARM با فناوری Jazelle می‌توان در اجرای سریع کدهای جاوا استفاده کرد. Jazelle DBX یا Direct Bytecode eXrection در تلفن‌های همراه و سایر لوازم برقی برای اجرای جاوا با کارایی بالا بدون تأثیرگذاری بر حافظه یا باتری استفاده می‌شود.واحد ممیز شناور (FPU) برداری(F): معماری ممیز شناور (Floating Point) در پردازنده‌های ARM اجرای      عملیات حسابی شناور را ارائه می‌دهد. محدوده دینامیکی و دقت ارائه شده توسط معماری ممیز شناور در پردازنده‌های ARM در بسیاری از برنامه‌های زمان واقعی (Real Time) در حوزه‌های صنعتی و خودروسازی      استفاده می‌شود.نسخه Synthesizable (S): هسته پردازنده ARM به      عنوان کد منبع (سورس کد) در دسترس است. این هسته نرم‌افزاری را می‌توان به فرمی کامپایل کرد که توسط EDA Tools به راحتی قابل درک باشد. با استفاده از کد منبع پردازنده می‌توان معماری پردازنده ARM را اصلاح کرد. نمونه‌ای در پردازنده‌های خانواده ARM7، پردازنده LPC2148 مبتنی بر معماری ARM7TDMI-S است.انواع پردازنده‌های آرمپردازنده‌های ARM را می‌توان به پردازنده‌های کلاسیک آرم (ARM Classic Processors)، پردازنده‌های توکار آرم (ARM Embedded Processors) و پردازنده‌های کاربردی آرم (ARM Application Processors) تقسیم‌بندی کرد.پردازنده‌های کلاسیک ARM شامل خانواده‌های ARM9 ،ARM7 و ARM11 هستند و ARM7TMDI هنوز پراستفاده‌ترین پردازنده 32 بیتی است. پردازنده‌های مبتنی بر ARM7 هنوز هم در بسیاری از دستگاه‌های کوچک و ساده 32 بیتی استفاده می‌شوند.می‌توان از ARM7 یا سایر پردازنده‌های کلاسیک ARM برای سیستم‌های تعبیه شده در مقیاس کوچک استفاده کرد که با استفاده از پردازنده‌های پیشرفته تعبیه شده ARM یا پردازنده‌های Cortex-M و پردازنده‌های Cortex-R ساخته می‌شوند. پردازنده‌های Cortex-M دارای مشخصات میکروکنترلری هستند، در حالی که پردازنده‌های Cortex-R زمان واقعی‌اند.پردازنده‌های Cortex-M دارای انرژی کارآمد بوده و برای اجرا ساده هستند و عمدتاً برای برنامه‌های پیشرفته تعبیه شده توسعه یافته‌اند. پردازنده‌های Cortex-M ARM به چندین هسته پردازنده مانند Cortex-M0،Cortex-M0+ ،Cortex-M3 ،Cortex-M4  و Cortex-M7 تقسیم می‌شوند.سری Cortex-A بالاترین عملکرد را در بین پردازنده‌‌های ARM دارند. این پردازنده‌ها در دستگاه‌های تلفن همراه، محصولات فناورانه مانند تجهیزات شبکه، لوازم برقی، سیستم‌های اتوماسیون، خودروها و سایر سیستم‌ها توکار به کار می‌روند.پردازنده‌های Cortex-A خود به انواع پردازنده‌های عملکرد بالا (High Performance)، بازده بالا (High Efficiency) و بازده بسیار بالا (Ultra-high Efficiency) تقسیم می‌شوند. هریک از این‌ها نیز خود انواع هسته‌های متخلفی دارند.میکروکنترلر آرممیکروکنترلر ARM خانواده STM32 مبتنی بر Cortex-M است. خانواده STM32 به طور کلی به چهار دسته کلی طبقه‌بندی می‌شوند که هر یک بازار خاص خودش را دارد. این چهار دسته عبارتند از: کارایی بالا، اصلی، توان بسیار کم و بی‌سیم. خانواده STM32 از میکروکنترلر ARM ساخت اس‌تی‌مایکروالکترونیکس(STMicroelectronics) است.میکروکنترلرهای STM32 امکانات جانبی ارتباطی سریال و موازی را ارائه می‌دهند که می‌توانند با انواع قطعات الکترونیکی از جمله سنسورها، نمایشگرها، دوربین‌ها، موتورها و سایر تجهیزات ارتباط برقرار کنند. هر نوع میکروکنترلر ARM از خانواده STM32 دارای حافظه داخلی فلش و رم هستند.دامنه عملکرد میکروکنترلر ARM خانواده STM32 بسیار گسترده است. برخی از ابتدایی‌ترین انواع این خانواده، سری STM32F0 و STM32F1 است که از فرکانس ساعت تنها 24 مگاهرتز شروع می‌شوند و در بسته‌هایی با حداقل 16 پین در دسترس هستند.از طرف دیگر، میکروکنترلر ARM سری STM32H7 با کارایی بسیار عالی، در بسته‌هایی با حداکثر 240 پین موجود است. این میکروکنترلر، یک میکروکنترلر ARM تک یا دو هسته‌ای است که از یک هسته Cortex-M7 با فرکانس 480 مگاهرتز و یک هسته Cortex-M7 با فرکانس ۲۴0مگاهرتز اضافه برای نسخه‌های دو هسته‌ای تشکیل شده است. دسته عملکرد بالا، بهترین عملکرد را در اجرای کد و انتقال داده‌ها ارائه می‌دهد. مدل‌های پیشرفته‌تر با واحدهای ممیز شناور (FPU) برای کاربردهای نیازمند پردازش عددی در دسترس هستند. این مدل‌های پیشرفته خط بین میکروکنترلر و یک میکروپروسسور را حذف می‌کنند.سرانجام، سری STM32L به طور خاص برای کاربردهای قابل حمل با توان کم (از یک باتری کوچک) طراحی شده است.ابزارهای توسعه میکروکنترلر آرمابزارهای توسعه برای تهیه کد، برنامه‌نویسی میکروکنترلر و آزمایش‌ و اشکال‌زدایی کد مورد نیاز هستند. ابزارهای توسعه شامل موارد زیر است:کامپایلر (Compiler)اشکال‌زدا (Debugger)برنامه‌نویس      سریالی درون‌مداری (ICSP)چندین ابزرا توسعه نرم‌افزاری برای تهیه کد در میکروکنترلرهای STM32 وجود دارد. ابزارهای نرم‌افزاری به عنوان محیط یکپارچه توسعه نرم‌افزار (IDE) در دسترس هستند که تمام ابزارهای لازم را در یک محیط یکپارچه در خود دارند.دو بسته توسعه رایج به شرح زیر هستند:محیط Keil MDK ARM IDE :Keil MDK ARM یک محیط توسعه بسیار پایدار است که به صورت رایگان قابل است. با Keil می‌توان یک برنامه کد را تا اندازه 32 کیلوبایت توسعه داد. برای تهیه برنامه‌های بزرگ‌تر، یک نسخه مجاز پولی را خریداری کرد.زنجیره CoIDE: یک زنجیره ابزار رایگان مبتنی بر نسخه مختصر شده‌ای از Eclipse IDE است که به همراه یک نسخه ARM تعبیه شده از کامپایلر GCC ساخته شده است.چندین IDE دیگر نیز وجود دارند که برای کار با میکروکنترلرهای STM32 در دسترس هستند. جدا از ابزارهای نرم‌افزاری، یک برنامه‌نویس سریالی درون‌مداری (ICSP) برای پروگرام و تست کد روی میکروکنترلر ARM مورد نیاز است. ICSP باید از طریق درگاه USB میکروکنترلر را با ابزارهای نرم افزاری PC متصل کند.میکروکنترلرهای Cortex-M از دو پروتکل برنامه‌نویسی پشتیبانی می کنند: JTAG و SWD. چندین ICSP وجود دارد که از این پروتکل‌ها پشتیبانی می‌کنند، از جمله: Keil U-Link 2 و Segger J-Link و ST-Link.چه سیستم‌عامل‌هایی از ARM پشتیبانی می‌کنند؟سیستم‌های Acorn: اولین کامپیوتر مبتنی بر معماری ARM، کامپیوتر شخصی Acorn بود که از سیستم‌عاملی به نام Arthur بهره می‌برد. سیستم‌عاملی مبتنی بر RISC OS که از معماری ARM پشتیبانی می‌کرد و Acorn و برخی دیگر از تولیدکنندگان از آن استفاده می‌کردند.سیستم‌عامل‌های توکار: معماری ARM از طیف وسیعی از سیستم‌عامل‌های توکار مانند Windows CE, Windows RT, Symbian, ChibiOS/RT, FreeRTOS, eCos, Integrity, Nucleus PLUS, MicroC/OS-II, QNX, RTEMS, CoOS, BRTOS, RTXC Quadros, ThreadX, Unison Operating System, uTasker, VxWorks, MQX و OSE پشتیبانی می‌کند.یونیکس: یونیکس و برخی از سیستم‌عامل‌های مبتنی بر یونیکس مانند: Inferno, Plan 9, QNX و Solaris از ARM پشتیبانی می‌کنند.لینوکس: بسیاری از توزیع‌های لینوکس از ARM پشتیبانی می‌کنند از آن جمله می‌توان به اندروید و کروم گوگل، Arch Linux، بادا سامسونگ، Debian, Fedora,OpenSuse, Ubuntu و WebOS اشاره کرد.سیستم عامل BSD: برخی از مشتق‌های BSD مانند OpenBSD و iOS و OS X اپل نیز از ARM پشتیبانی می‌کند.ویندوز: معماری‌های ARMv 5, 6 و ۷ از ویندوز CE که در ابزارهای صنعتی و PDAها استفاده می‌شود، پشتیبانی می‌کند. ویندوز RT و ویندوز فون نیز از معماری ARMv7 پشتیبانی می‌کنند.آرم چطور تجارت می‌کند؟روش کار آرم بسیار ساده است و با آنچه در دنیای رایانه شخصی شاهد هستیم، متفاوت می‌باشد. به‌طور کلی آرم سه نوع لایسنس اصلی به مشتریان واگذار می‌کند: POP، پردازنده و معماری.لایسنس پردازنده اجازهٔ استفادهٔ مایکروپراسسور یا پردازندهٔ گرافیکی طراحی شده توسط آرم است. در این صورت نمی‌توان طراحی را تغییر داد، اما می‌توان از آن به هر شکل ممکن استفاده کرد. به عنوان مثال تراشه‌های اگزینوس اُکتای سامسونگ را در نظر بگیرید، در این تراشه‌ها از ۴ هستهٔ ARM Cortex A7 و ۴ هستهٔ Cortex A15 استفاده شده‌است. این روش استفاده بیان‌گر لایسنس استفاده از پردازنده است.آرم در مورد کاربرد طرح‌ها در سیلیکون راهنمایی‌هایی می‌کند، اما در نهایت تیم به‌کارگیری فیزیکی پردازنده است که برای رسیدن به بهترین فرکانس در توان مصرفی مورد نظر تصمیم می‌گیرد.بستهٔ بهینه‌سازی پردازنده یا Processor Optimization Pack یک قدم فراتر از لایسنس استفاده از پردازنده است. اگر مشتری در کاربرد فیزیکی پردازنده ماهر نباشد، آرم با فروش POP به آن‌ها کمک می‌کند یا به عبارت دیگر یک طرح یک پردازندهٔ بهینه را به مشتری می‌فروشد تا پس از تولید در یک کارخانهٔ خاص، حداقل کارایی مشخص شده را دارا باشد.در مورد هسته‌های Cortex A8 آرم، اپل و سامسونگ به شکل خاصی از آن استفاده کردند که باعث بهینه شدن فرکانس در برابر توان مصرفی شد. این دو کمپانی به مواردی که طراحی و کاربرد Cortex A8 را دشوار می‌کرد، دسترسی داشتند؛ اما بسیاری از دیگر تولیدکنندگان پهنای باند لازم یا بودجهٔ کافی برای انجام بهینه‌سازی‌ها را نداشتند.بهینه سازی پردازنده‌ها یا POPها برای ترکیبی از پردازنده‌ها، کارخانه‌ها و فرایندهای تولیدی مختلف آماده شده‌است. به عنوان مثال برای تولید پردازندهٔ Cortex A12 در کارخانهٔ TSMC طی فرایند تولید ۲۸نانومتری HPM یک POP مشخص وجود دارد.آخرین و کامل‌ترین لایسنس، لایسنس معماری است. در این روش آرم لایسنس یکی از معماری‌ها مثل ARMv7 یا ARMv8 را به مشتری واگذار می‌کند و مشتری می‌تواند به هر شکل دلخواهی از آن استفاده کند.کوآلکام برای طراحی و تولید هسته‌های Krait و اپل برای طراحی هسته‌های Swift از این لایسنس استفاده کرده‌اند. چنین مایکروپراسسورهایی با معماری استاندارد صنعتی (یا ISA) هسته‌های Cortex A15 سازگاری دارند، اما کاربرد خاصی از معماری استاندارد صنعتی آرم هستند. برای تأیید سازگاری باید طبق دستورالعمل آرم عمل کرده و تست‌ها را یکی پس از دیگری انجام داد. آرم پشتیبانی‌هایی برای طراحان در نظر گرفته ولی تصمیم نهایی، استفاده و بررسی اعتبار طرح‌ها بر عهدهٔ مشتری است.از نگاه آماری آرم حدود ۱۰۰۰ لایسنس به ۳۲۰ کمپانی مختلف فروخته‌است. از این ۳۲۰کمپانی تنها ۱۵مورد لایسنس معماری را در اختیار دارند.با تشکر از وقتی که گذاشتید امیدوارم مطالب این مقاله براتون مفید بوده باشه.</description><category>amirahmad eslampanah</category><author>amirahmad eslampanah</author><pubDate>Thu, 23 Dec 2021 19:08:42 +0330</pubDate></item><item><title>ردیس REDIS چیست؟ - دانشگاه صدرا - استاد یعقوبی تبار - درس مهندسی اینترنت</title><link>https://virgool.ir/@amirahmadeslampanah/ردیس-redis-چیست-دانشگاه-صدرا-استاد-یعقوبی-تبار-درس-مهندسی-اینترنت-redahj5yk6k1</link><description>نام استاد : داود يعقوبي تبارنام دانشجو : امیراحمد اسلام‌پناهشماره دانشجویی : 942211114024موضوع ارائه : بررسی و معرفی Redisدرس : شیوه ارائه مطالب علمی وفنیمقدمهبرای یک WEB SERVICE با ترافیک زیاد، الزام است که از نوعی مکانیزم caching بهرهمند باشد. Caching راهی برای ذخیره داده‌های محاسبه شده در RAMاست، تا بعدا درخواست‌ها بتوانند به سرعت حاضر شوند. همچنین اگر این کار به خوبی پیاده‌سازی شود، از برخی ارجاع‌ها به لایه داده‌ها و محاسباتی در کناره‌های برنامه جلوگیری می‌کند. Redis و Memcached دو عدد از معروف‌ترین مخازن موجود، بر پایه رم هستند.ردیس علاوه بر caching، می‌تواند برای برنامه‌های دیگری که در آن‌ها نیازی به دسترسی سریع و مکرر به داده‌ها وجود ندارد نیز استفاده شود. در این مقاله قصد داریم تا با ماهیت و ویژگی‌های ردیس آشنا شویم.ردیس چیست؟در تعریف ساده redis یک دیتابیس است و آن را می‌توان در دسته دیتابیس‌های NoSQL قرار داد و معنی این حرف این است که مانند دیتابیس‌های mysql یا sql server نیاز به تعریف کردن جدول وجود ندارد و شما می‌توانید بدون ساختار مشخص اطلاعات خود را در ردیس ذخیره سازی کنید و از آنجایی که redis اطلاعات را در RAM سیستم ذخیره می‌کند، دارای سرعت خواندن و نوشتن نسبتا بالای است.به زبانی دیگر یک مخزن ساختار داده در داخل رم است، که از بسیاری انواع داده مانند رشته‌ها، hashها، setها، setهای مرتب شده و... پشتیبانی می‌کند. به طور اساسی ردیس یک دیتابیس key/value است، یعنی هر نوعی از مقدار داخل Redis در قبال کلیدی که به طور باینری امن است، ذخیره شده است و این مقدار می‌تواند هر چیزی از یک رشته خالی گرفته تا یک رشته hash طولانی باشد.درست است که ردیس اطلاعات را در رم ذخیره می‌کند اما به این معنی نیست که پس از خاموش شدن و یا هر اتفاقی که باعث خالی شدن رم شود، داده‌های ما پاک می‌شوند.بلکه ردیس برای نگه داری دائمی داده‌ها آنها را با توجه به تنظیماتی که برای آن مشخص کرده‌ایم به دیسک اصلی سیستم منتقل کرده و بعد از پاک شدن رم مجدد می‌تواند آنها را منتقل کند و کار را از سر بگیرد.این ویژگی باعث شده اصطلاحا به آن on-disk persistence بگویند و این کار را می‌تواند در سطوح مختلفی انجام دهد.این سطوح شامل موارد زیر می شوند:روش RDB: اگر قصد back up گیری از داده‌های خود به صورت فایل های جداگانه در فاصله های زمانی مشخص و بعد از تعداد مشخصی تغییر را دارید می‌توانید از این روش استفاده کنید و کافی است به ردیس بگویید که در چه بازه‌های زمانی به صورت تکراری و تا چه مدت از داده ها back up بگیرد. بدیهی است که در این روش ممکن هست داده هایی رو از دست بدهید و اگر در لحظه داده های شما مهم هستند بهتر هست از روش بعدی استفاده کنید.روش AOF: این روش مخفف Append Only File است به معنی اینکه یک بار فایل RDB را می‌سازد و با هر تغییر می‌تواند به آن فایل اضافه کند و به این صورت اگر چه شاید کمی کندتر باشد ولی برای داده‌های حساس‌تر گزینه بهتری هست.غیر فعال کردن Persistence Mode به طور کلی و back up نگرفتناستفاده ترکیبی از RDB و AOFردیس کاربردهای زیادی دارد از جمله:سیستم کش (session cache) که دارای ماندگاری اطلاعاتی بالایی است.کش تمام صفحه (Full page cache) که جهت جلوگیری از اجرای متعدد صفحات می توان محتوای صفحه را به صورت کامل ذخیره کرد تا از مراجعه مدوام به DB جلوگیری شود و سرعت بارگزاری بالا برود.صفها (Queues) که می توان یک صف از وظایف (Tasks) ایجاد کرد و آنها را به نوبت اجرا کرد.کاربرد Caching در Redisزمانی از Caching استفاده می‌شود که قصد داشته باشیم دسترسی به هارد دیسک کمتر انجام شود، به عبارت دیگر در Caching اطلاعات در حافظه موقت ذخیره می‌شود که این فرآیند سرعت دسترسی به اطلاعات و بارگذاری آن‌ها را افزایش می‌دهد. به این ترتیب به جای چندین بار مراجعه برای بازخوانی اطلاعات از سرورها، این اطلاعات یک بار دریافت شده و در قالب حافظه نهان که همان Caching است در ردیس قرار می‌گیرد.از این طریق در کنار صرفه‌جویی در زمان و افزایش سرعت، دسترسی کمتری به منابع نیاز انجام می‌شود که این امر نیز به بهینه‌سازی بیشتر کمک می‌کند.در این بین به این نکته نیز باید اشاره کرد که در ردیس اطلاعات در حافظه موقتی و Cache ذخیره می‌شوند، این امر باعث می‌شود دسترسی به آن‌ها با سرعت بسیار بیشتری انجام شود اما این سکه روی دیگری نیز دارد و امکان ذخیره‌سازی دائمی اطلاعات را در Redis نخواهید داشت. به این ترتیب برای نمونه اگر قصد دارید اطلاعات مهم یک مجموعه تجاری را به صورت دائم ذخیره‌سازی کنید، Redis در این زمینه کاربردی نخواهد داشت. اما از طرف دیگر روی Redis برای ذخیره کوکی‌ها، Session، اطلاعات مربوط به ورود و خروج کاربران و به اشتراک‌گذاری داده‌ها می‌توانید حساب باز کنید. به‌عبارت ساده‌تر هر داده‌ای که لزومی به ذخیره‌ دائم ندارد را می‌توان با Redis مدیریت کرد.یک مثال از Redis: فرض کنید یک وبسایت خبری چند زبانه دارای بخش‌های خبری مختلف امکان جستجو و فیلتر اخبار را در وبسایت گذاشته و کاربران می توانند بر اساس زبان، بخش، تاریخ و‌... اخبار را جستجو و فیلتر کنند. در صورتی که تعداد کاربران جستجو کننده زیاد باشد باشد فشار زیادی به بانک اطلاعاتی می آید اما اگر نتایج جستجو را هر 15 دقیقه یکبار تولید و در حافظه ذخیره کنیم سرعت جستجو بسیار زیاد خواهد شد. با کمک Redis برای هر جستجو پارامترهای زبان، گروه خبری، تاریخ خبر را به صورت یک رشته سر هم کرده که Key جستجومی شود و value خروجی این جستجو خواهد شد. اگر کلید جستجو در Redis بود مقدار آن را به عنوان خروجی به کاربر می‌دهیم در غیر این صورت به DB مراجعه می‌کنیم، نتیجه را به کاربر بر‌می‌گردانیم و در Redis  ذخیره می‌کنیم.مقابسه Redis و Memcached:هر دو پروژه متن‌باز هستند و در عین حال دیتا را در حافظه اصلی ذخیره می‌کنند. اما تفاوت این دو جایی معلوم می‌شود که به سراغ ویژگی‌ها و قابلیت‌های آن‌ها میرویم. Memcached اغلب برای پروژه‌های ساده که حافظه Ram کمی مصرف می‌کنند عالی است، اما در همین حین در مواجه با داده‌های مرتب شده و یا serialize شده نامناسب است. به دلیل پشتیبانی Redis از اکثر ساختار داده‌های مختلف، قدرت و کارایی بیشتری در برخورد با مجموعه داده‌های بسیار زیاد دارد. همچنین توانایی بیشتری در بهبود cache و راندمان در برنامه‌های مخصوص دارد.مقایسه Redis و MongoDB:تفاوت این دو در این است که یکی به صورت دیتابیسی در حافظه، دیگری دیتابیسی بر روی دیسک است و هر کدام برای هدف خاصی طراحی شده‌اند اما اغلب در کنار هم با هدف افزایش سرعت پردازش و کارایی دیتابیس‌های NoSQL استفاده می‌شوند. به دلیل قابلیت cache که در Redis وجود دارد، خیلی سریع‌تر می‌توان به داده‌ها دسترسی پیدا کرد. در نتیجه می‌توانیم از این قابلیت بهره ببریم و Redis را به عنوان رابطی برای MongoDB استفاده کنیم تا بتوانیم سریع‌تر و موثر‌تر داده‌های بیشتر و بزرگ‌تری را real-time تر بروزرسانی و ویرایش کنیم. به دلیل این که MongoDB می‌تواند حجم قابل توجهی از داده‌ها را ذخیره کند و از طرف دیگر با توجه به سرعت بسیار بالای 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اکنون چند دستور پایه از ردیس را بررسی می‌کنیم:تنظیم یک مقدارسینتکس: &lt;SET &lt;key&gt; &lt;valueمثال: SET firstname Albertبازیابی یک مقدارسینتکس: &lt;GET &lt;keyمثال: GET firstnameبررسی وجود یک کلیدسینتکس: &lt;EXISTS &lt;keyتعیین تاریخ انقضا برای یک کلید&lt;EXPIRE &lt;key&gt; &lt;seconds&lt;PEXPIRE &lt;key&gt; &lt;millisecondsتنظیم یک کلید، بررسی وجود آن و تاریخ انقضا به طور همزمانسینتکس: SET &lt;key&gt; &lt;value&gt; &lt;EX seconds&gt;|&lt;PX milliseconds&gt; NX|NXNX - فقط وقتی که یک کلید وجود ندارد، تنظیم کن.XX - فقط وقتی که یک کلید از قبل وجود دارد، تنظیم کن.EX - زمان انقضا را برای کلید بر حسب ثانیه تعیین می‌کند.PX - زمان انقضا را برای کلید بر حسب میلی ثانیه تعیین می‌کند.افزایش یا کاهش یک مقدار integerRedis روش مناسبی برای افزایش یا کاهش مقادیر integer که شاید به عنوان شمارنده استفاده شوند، فراهم کرده است.سینتکس:INCR &lt;key&gt;DECR &lt;key&gt;INCRBY &lt;key&gt; &lt;increment value&gt;DECRBY &lt;key&gt; &lt;decrement value&gt;استفاده از Client برای زبان های مختلفتقریبا برای تمامی زبان های مهم برنامه نویسی که در دنیا رایج هستند Client استفاده از Redis نوشته شده است. برای مثال در زبان PHP تعداد زیادی Redis Client وجود دارد که معروف ترین اونها phpredis و Predis هست. بنا براین شما با هر زبان برنامه نویسی در حال کد زدن هستید به راحتی می توانید به دیتا بیس Redis خود متصل شوید و دستورات خود را اجرا نمایید.آشنایی با Data Type های اصلی ردیسهمانطور که گفته شد Redis تنها یک دیتا بیس ذخیره کننده key value به صورت ساده نیست بلکه می تواند انواع مختلفی از ساختار های داده‌ای را به عنوان value در خود ذخیره کند که از این رو می توان Redis را یک data structures server نیز نامگذاری کرد.این ساختار ها در ۵ دسته اصلی در Redis پشتیبانی می شوند:stringsListsSetsSorted setsHashesحال این 5 دسته را بررسی می‌کنیم تا بیشتر با دستورهای آن‌ها آشنا شویم:۱. نوع Stringsدر واقع وقتی string را به عنوان value ذخیره می کنید یک map بین string و string دارید. برای ساخت و یا در یافت string در ‌ردیس کافی هست از دو دستور زیر استفاده نمایید:1234&gt; set mykey somevalue&#xA;OK&#xA;&gt; get mykey&#xA;&#34;somevalue&#34;اگر یک key از قبل تعریف شده باشد و مجدد آن را set کنید برروی اولی تنها value را جایگزین می کند. از موارد استفاده این نوع داده ای شاید بتوان ذخیره فایل های html را مثال زد تا با cache کردن آنها بتوان مجدد به آنها دسترسی داشت و دوباره render نشوند.۲. نوع Listsاین نوع برای داشتن لیستی از رشته ها هست. دقیقا لیستی که شما بتوانید از ابتدا یا انتهای آن مقادیر خود را اضافه و یا کم کنید. برای درک بهتر مثالی می‌زنم، یک timeline و یا یک تاریخچه چت رو در نظر بگیرید. باید به تریتب پیام ها ی رد و بدل شده بین دو کاربر را نگه دارید و یا برای timeline پست های منتشر شده مثل همین پست های ویرگول که یک ترتیبی بر اساس تاریخ وجود دارد. این نوع لیست را در ردیس می توان با نوع Lists و با کمک دستورات زیر ایجاد کرد:1LPUSH mylist aیک لیست به نام mylist ساختیم و مقدار a را به ابتدای آن اضافه کردیم. حالا میخواهیم به انتهای لیست هم مقداری اضافه کنیم:1 RPUSH mylist cالان یک لیست داریم که ۲ تا مقدار داخل آن هست و می توان با همین ۲ دستور مقادیر دیگری را هم اضافه کرد:12LPUSH mylist b&#xA;LPUSH mylist dبعد از اجرای ۴ دستور بالا هم اکنون به ترتیب زیر لیستی به نام mylist داریم:12341) &#34;d&#34;&#xA;2) &#34;b&#34;&#xA;3) &#34;a&#34;&#xA;4) &#34;c&#34;از آنجایی که LPUSH به ابتدای لیست اضافه می کند، در لیست بالا مشخص هست که مقدار ابتدایی لیست چرا &#34;d&#34; هست.خوب حالا می خواهیم با دستور زیر مقدار ابتدای لیست را بگیریم:12&gt; LRANGE mylist 0 0&#xA;1) &#34;d&#34;دستور LRANGE می تواند با توجه به مقدار ابتدایی و انتهایی که به آن می دهیم به ترتیب مقادیر داخل List را به ما برگرداند. در مثال بالا از خانه 0 تا 0 یعنی تنها اولین مقدار لیست و در مثال پایین می توانیم تمام ۴ مورد رو بگیریم:12345&gt; LRANGE mylist 0 3&#xA;1) &#34;d&#34;&#xA;2) &#34;b&#34;&#xA;3) &#34;a&#34;&#xA;4) &#34;c&#34;برای گرفتن یک مقدار از ابتدا و یا انتهای لیست و حذف آن باید به صورت زیر با دستورات POP کار کنیم:123456&gt; LPOP mylist &#xA;&#34;d&#34;&#xA;&gt; LRANGE mylist 0 3&#xA;1) &#34;b&#34;&#xA;2) &#34;a&#34;&#xA;3) &#34;c&#34;در ابتدا با LPOP مقدار ابتدای لیست را که &#34;d&#34; بود را گرفتیم و آن از لیست حذف شد.همین کار با دستور RPOP برای انتهای لیست قابل انجام هست:12345&gt; RPOP mylist &#xA;&#34;c&#34;&#xA;&gt; LRANGE mylist 0 3&#xA;1) &#34;b&#34;&#xA;2) &#34;a&#34;توی این لیست تا دلتان می خواهد می تونید مقدار اضافه کنید چون Redis می تواند بیش از ۴ میلیارد المان در هر لیست نگه داری کند.۳. نوع Setsشاید اگر لیستی از رشته ها را بخواهید بسازید از List استفاده کنید ولی اگر لیستی بخواهید که؛ ترتیب در آن مهم نباشد، بخواهید که مقادیر تکراری وارد لیست شما نشوند، از هر کجای لیست که خواستید با سرعت خیلی بالا مقادیر را بگیرید و بررسی کنید که آیا مقداری که دنبال آن هستید در این لیست هست یا خیر، باید از Sets استفاده کنید.در واقع نوع داده ای Sets در ردیس برای داشتن یک collection از رشته‌ها به عنوان مقادیر هست با این ویژگی مهم که دیگر نیاز به بررسی وجود این مقدار در collection نیست و هر چند بار که یک مقدار تکراری را به Set اضافه کنیم همان یک مقدار را در collection خودمون داریم. یکی دیگه از ویژگی های جالب Set این هست که شما می توانید چند تا Set را در Redis باهم Union کنید و از اونها استفاده کنید. از موارد پر کاربرد Set می توان به محاسبه ی تعداد کاربران یکتای بازدید کننده از سایت اشاره کرد به این صورت که یک Set از مقادیر ip تمام کاربران بازدید کننده داریم و از آنجایی که این مقادیر تکراری نمی باشد می توان با محاسبه تعداد آنها به بازدید یکتای سایت خود برسیم.پس با دستورات زیر می توانیم بیش از ۴ میلیارد مقدار متفاوت را در یک ‌Set اضافه کنیم:123456&gt; SADD myset &#34;Hello&#34;&#xA;  1&#xA;&gt; SADD myset &#34;World&#34;&#xA;  1&#xA;&gt; SADD myset &#34;World&#34;&#xA;  0در مثال بالا با دستور SADD یک Set به نام myset ساختیم و مقدار &#34;Hello&#34; و &#34;World&#34; رو ابتدا به آن اضافه کردیم و مقدار 1 را به صورت integer دریافت کردیم که نشان می دهد مقادیر به Set اضافه شد اما در دستور بعدی مجدد مقدار &#34;World&#34; را اضافه کردیم که مقدار 0 را بر گرداند که چون مقداری تکراری بود.۴. نوع Sorted Setsهمان طور که از اسم این نوع داده مشخص هست شبیه Sets هست یعنی یک collection از مقادیر رشته‌ای بدون تکرار، اما بر خلاف Set می توان در Sorted Set یک مقدار به عنوان Score به هر المان داد. با این مقدار می توانیم از کمترین به بیشترین score المان های خودمون رو مرتب کنیم و این نکته را هم باید بدونیم که برخلاف مقادیر المان ها، score ها می توانند تکراری هم باشند. برای مثالی از کاربرد این نوع داده می توانیم لیستی از task ها را در نظر بگیریم که تکراری نیستند و هر کدام یک درجه اهمیتی دارند. حالا می توانیم این لیست را از هر کجایی که نیاز داریم مرتب کنیم. ساخت یک Sorted Set با دستور ZADD قابل انجام هست:123456&gt;ZADD myzset   1  &#34;one&#34;&#xA;1&#xA;&gt; ZADD myzset  2  &#34;two&#34;&#xA;1&#xA;&gt; ZADD myzset  3  &#34;three&#34; &#xA;1خوب یک Sorted Set با نام myzset ساختیم و ۳ تا مقدار one, two, three رو با socre هایی به ترتیب 1,2,3 به آن اضافه کردیم.حالا اگر بخواهیم score مقدار two را ببینیم با دستور ZSCORE خواهیم داشت:12&gt; ZSCORE myzset &#34;two&#34;&#xA;&#34;2&#34;در زمان استفاده از Sorted Set، احتمالا مواقعی نیاز داریم که المان هایی را که بین ۲ تا score وجود دارند را بگیریم یعنی کاری که با دستور پایین انجام دادیم:123&gt;  ZRANGE myzset 2 3&#xA;1) &#34;two&#34;&#xA;2) &#34;three&#34;بین ۲ تا مقدار 2 و 3 به عنوان score در myzset این ۲ المان وجود داشت. حذف یک مقدار از Sorted Set با دستور ZREM قابل انجام هست:12&gt; ZREM myzset &#34;two&#34;&#xA;1۵. نوع Hashesآخرین DATATYPE که در ردیس بررسی میکنیم بسیار می تواند پر کاربرد باشد و البته کار راه انداز! اگر می خواهید داخل هر key یک object نگه دارید Hash دقیقا پاسخ نیاز شماست. هر Hash داخل Redis این امکان رو به شما می‌دهد که به ازای هر key یک map از رشته هایی به صورت key value را نگه دارید یعنی دقیقا همان چیزی که از object انتظار دارید. از موارد کاربرد آن می توان به نگه داشتن اطلاعات کاربران لاگین شده به سیستم اشاره کرد. فرض کنید به ازای هر کاربری که به سیستم شما لاگین می شود یک key از نوع Hash بسازید و داخل آن اطلاعاتی مثل نام، ایمیل، تلفن و هر چیزی که نیاز دارید نگه داری کنید. بیایید همین مثال بالا را در redis cli اجرا کنیم، پس یک key به اسم user و مقدار id اون در دیتابیس که فرض می کنیم ۱۰۰۰ باشد می سازیم و مقادیری که می خواهیم را در آن نگه می داریم:12&gt; HMSET user:1000 username vahiiiid  password 1234 age 26&#xA;OKخوب همان طور که دیدید این کار با دستور HMSET انجام شد و مقادیری مثل username, password و age از کاربر نگه داری شد. حالا اگر تمام این اطلاعات کابر را بخواهیم کافی هست دستور زیر را اجرا کنیم:1234567&gt; HGETALL user:1000 &#xA;1) &#34;username&#34; &#xA;2) &#34;vahiiiid&#34; &#xA;3) &#34;password&#34;&#xA;4) &#34;1234&#34; &#xA;5) &#34;age&#34;&#xA;6) &#34;26&#34;برای تغییر یک مقدار از Hash می توانیم به صورت زیر عمل کنیم:1HSET user:1000 password 12345اگر فقط مقدار یک فیلد را بخواهیم بگیریم می توانیم از HGET استفاده کنیم:12&gt; HGET user:1000 age&#xA;&#34;26&#34;با دستور HEXISTS هم می توان از وجود یک فیلد در Hash اطلاع پیدا کنیم:12&gt; HEXISTS user:1000 age&#xA;1دستورات بیشتر؟در این مقاله تنها بخشی از دستورات برای آشنایی بیشتر با DATA TYPEهای ردیس بررسی کردیم اگر می‌خواهید با دستورات بیشتری آشنا شوید از این لینک اقدام کنید.جمع بندیردیس ویژگی‌هایی نظیر سادگی، کارایی استثنایی و خاصیت atomic در ویرایش داده‌ها دارد که باعث می‌شود حل کردن مسائلی که در دیتابیس‌های متداول رابطه‌ای نظیر MySQL مشکل بود، به راحتی انجام شود و ردیس نقش آچار فرانسه در ذخیره‌سازی داده‌ها را برای توسعه‌دهندگان داشته باشد. توسعه دهندگان همیشه به سرعت و کارایی بالا علاقه نشان می‌دهند.منابع:سایت ویرگولسایت رسمی ردیسسایت راکتو چند سایت و مقاله دیگر                                                    تقدیم به استاد داود یعقوبی تبار                               با تشکر از وقتی که گذاشتید امیدوارم مورد رضایت بوده باشه</description><category>amirahmad eslampanah</category><author>amirahmad eslampanah</author><pubDate>Wed, 30 Dec 2020 20:50:02 +0330</pubDate></item></channel></rss>