کش ردیس (Redis) چیست؟

کش ردیس (Redis) چیست؟
زمان تقریبی مطالعه : ۱۱ دقیقه

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

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

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

در این مقاله می خواهیم درباره ردیس، مزایا و موارد استفاده  از آن صحبت کنیم؛ مطمئناً برای بسیاری از شما که تا حالا با این مفهوم آشنایی نداشته اید، مفیدخواهد بود پس با ما همراه باشید.

Redis چیست؟

Redis که مخفف Remote Dictionary Server است، یک ذخیره‌سازی اطلاعاتی سریع، منبع باز، درون حافظه و با ارزش کلیدی است در بیانی ساده تر: در واقع، کش ردیس یک نوع ساختمانِ داده است که در RAM سرور ها قرار می‌گیرد و اطلاعات نیز به صورت موقت در آن ذخیره می‌شوند.

این پروژه زمانی آغاز شد که سالواتور سانفیلیپو، توسعه‌دهنده اصلی Redis، قصد داشت مقیاس‌پذیری استارت‌آپ ایتالیایی خود را بهبود بخشد؛ او Redis را در سال ۲۰۰۶ توسعه داد، که اکنون به عنوان پایگاه داده، حافظه پنهان و واسطه پیام مورد استفاده قرار می گیرد.

فرض کنید وب اپلیکیشنی را دارید که سرعت لود پایین تری نسبت به سایت های عادی دارد و تقریباً ۳۰ الی ۶۰ ثانیه لود سایت زمان میبرد، در این میان با وصل کردن سرویس ردیس به سایت خود، میتوانید عملیات کشینگ را انجام دهید تا اطلاعات در سریعترین حالت خود به نوعی از طریق Ram لود شوند و به مراجعه کننده نمایش داده شوند.

Redis زمان پاسخ دهی زیر میلی ثانیه ای را ارائه می دهد و میلیون ها درخواست را در ثانیه برای برنامه های کاربردی بلادرنگ در صنایعی مانند بازی، فناوری تبلیغات، خدمات مالی، مراقبت های بهداشتی و اینترنت اشیا فعال می کند.

امروزه Redis یکی از محبوب ترین موتورهای منبع باز امروزی است که توسط Stack Overflow برای پنج سال متوالی به عنوان پایگاه داده موقت نامگذاری شده است، به دلیل عملکرد سریع، Redis یک انتخاب محبوب برای ذخیره سازی، مدیریت جلسه، بازی، تابلوهای امتیازات، تجزیه و تحلیل بلادرنگ، فضای مکانی، سواری، چت / پیام، پخش رسانه و برنامه های فرعی است.

AWS دو سرویس کاملاً مدیریت شده را برای اجرای Redis ارائه می دهد؛ Amazon MemoryDB for Redis یک سرویس پایگاه داده درون حافظه سازگار با Redis است که عملکرد بسیار سریعی را ارائه می دهد، Amazon ElastiCache for Redis یک سرویس کش کاملاً مدیریت شده است که دسترسی به داده‌ها را از پایگاه‌های داده اولیه و ذخیره‌های داده با تأخیر میکروثانیه سرعت می‌بخشد.

این یک ذخیره‌سازی اطلاعات کلیدی-مقدار پیشرفته NoSQL است و اغلب به عنوان یک سرور ساختار داده شناخته می‌شود زیرا کلیدهای آن شامل رشته‌ها، هش‌ها، لیست‌ها، مجموعه‌ها، مجموعه‌های مرتب‌شده، بیت مپ و هایپرلاگ است؛ عملیات خواندن و نوشتن Redis بسیار سریع است زیرا داده ها را در حافظه موقت ذخیره می کند؛ همچنین می‌توان داده‌ها را روی دیسک ذخیره کرد یا به حافظه بازگرداند.

از آنجایی که Redis داده های خود را در حافظه موقت ذخیره می کند، بیشتر به عنوان کش استفاده می شود، برخی از سازمان های بزرگی که از Redis استفاده می کنند عبارتند از Twitter، GitHub، Instagram، Pinterest و Snapchat

Key value store یا پایگاه داده

پایگاه داده کلید-مقدار نوعی از پایگاه داده غیرمرتبط است که از یک روش ساده ارزش گذاری کلیدی برای ذخیره داده ها استفاده می کند.

هم کلیدها و هم مقادیر می توانند هر چیزی از اشیاء ساده تا اشیاء مرکب پیچیده باشند، پایگاه های داده ارزش گذاری کلیدی بسیاری قابل پارتیشن بندی هستند و امکان مقیاس بندی افقی را در مقیاس هایی فراهم می کنند که انواع دیگر پایگاه های داده نمی توانند به آن دست یابند؛ به عنوان مثال، اگر پارتیشن موجود به ظرفیت پر شود و فضای ذخیره‌سازی بیشتری مورد نیاز باشد، آمازون DynamoDB پارتیشن‌های اضافی را به یک جدول اختصاص می‌دهد.

مقایسه حافظه پنهان Redis

حافظه پنهان سمت کلاینت Redis به عنوان «ردیابی » نیز شناخته می شود، از آنجایی که Redis یک راه حل مبتنی بر ساختار داده است، کش کردن در Redis می تواند از رشته ها، هش ها، لیست ها، مجموعه ها، مجموعه های مرتب شده، جریان ها و بسیاری از ساختارهای داده دیگر استفاده کند و همچنین لازم است بدانید که خواندن و نوشتن در کش نیاز به استفاده از دستورات GET و SET در Redis دارد.

اگر این عمل به درستی پیاده سازی شود، کش در Redis می تواند به طور قابل توجهی عملکرد برنامه را بهبود بخشد؛ اما چگونه ذخیره‌سازی Redis در مقابل گزینه‌های دیگر قرار می‌گیرد؟

Redis اغلب با Memcached، یکی دیگر از فروشگاه‌های منبع باز حافظه کلیدی مقایسه می‌شود؛ مانند Redis، Memcached یک موتور کش محبوب با پشتیبانی از ده ها زبان برنامه نویسی است، با توجه به InfoWorld، با این حال، Redis بهترین انتخاب برای تقریباً همه موارد استفاده از کش است؛ اگرچه Memcached ممکن است برای داده های نسبتاً کوچک و ثابت مانند قطعات کد HTML بهتر باشد.

دلایل ترجیح دادن Redis به Memcached برای ذخیره سازی عبارتند از:

  • Redis چندین خط مشی تخلیه کش را ارائه می دهد، در حالی که Memcached فقط LRU را ارائه می دهد (که اخیراً استفاده شده است)
  • نام‌ها و مقادیر کلید در Redis می‌توانند تا ۵۱۲ مگابایت باشند، در حالی که نام‌های کلیدی در Memcached می‌توانند تنها ۲۵۰ بایت باشند.
  • کش های Redis می توانند طیف وسیعی از ساختارهای داده، از جمله لیست ها، مجموعه ها، مجموعه های مرتب شده، بیت مپ ها و شاخص های مکانی را ذخیره کنند.

توجه: لازم به ذکر است به منظور تهیه سرور مجازی با سرعت بالا و دارای SSD های پرسرعت، میتوانید از طریق لینک روبرو: خرید سرور مجازی، موارد مورد نیاز را مورد بررسی قرار دهید❗

کش ردیس (Redis) چیست؟

مزایای Redis

کارایی

Redis امکان دسترسی به داده‌ها با تأخیر کم و توان عملیاتی بالا را فراهم می‌کند، برخلاف پایگاه‌های داده سنتی، ذخیره‌سازی داده‌های درون حافظه نیازی به سفر به دیسک ندارند و تأخیر موتور را به میکروثانیه کاهش می‌دهد؛ به همین دلیل، ذخیره‌های داده درون حافظه می‌توانند عملیات‌ های بیشتر و زمان ‌های پاسخ سریع‌ تر را پشتیبانی کنند؛ که نتیجه عملکرد سریع با میانگین عملیات خواندن و نوشتن کمتر از یک میلی ثانیه و پشتیبانی از میلیون ها عملیات در ثانیه است.

ساختارهای داده انعطاف پذیر

برخلاف سایر فروشگاه‌های داده با ارزش کلیدی که ساختارهای داده محدودی را ارائه می‌دهند، Redis دارای طیف گسترده‌ای از ساختارهای داده برای رفع نیازهای برنامه شما است. انواع داده Redis عبارتند از:

  • رشته ها – متن یا داده های باینری تا اندازه ۵۱۲ مگابایت
  • لیست ها – مجموعه ای از رشته ها به ترتیبی که اضافه شده اند
  • مجموعه ها – مجموعه ای نامرتب از رشته ها با قابلیت قطع، اتحاد و تفاوت انواع دیگر مجموعه ها
  • مجموعه های مرتب شده – مجموعه هایی که بر اساس یک مقدار مرتب شده اند
  • هش – ساختار داده ای برای ذخیره لیستی از فیلدها و مقادیر
  • Bitmaps – یک نوع داده که عملیات سطح بیت را ارائه می دهد
  • HyperLogLogs – یک ساختار داده احتمالی برای تخمین موارد منحصر به فرد در یک مجموعه داده
  • جریان – یک ساختار داده ورود به سیستم صف پیام
  • جغرافیایی – ورودی های مبتنی بر طول و عرض جغرافیایی نقشه ها

سادگی و سهولت استفاده

Redis شما را قادر می سازد تا کدهای پیچیده سنتی را با خطوط کمتر و ساده تر بنویسید؛ با Redis، خطوط کمتری کد برای ذخیره، دسترسی و استفاده از داده ها در برنامه های خود می نویسید. تفاوت این است که توسعه دهندگانی که از Redis استفاده می کنند می توانند از یک ساختار دستوری ساده بر خلاف زبان های پرس و جو پایگاه های داده سنتی استفاده کنند.

برای مثال، می‌توانید از ساختار داده‌های هش Redis برای انتقال داده‌ها به یک فروشگاه داده با تنها یک خط کد استفاده کنید. یک کار مشابه در یک فروشگاه داده بدون ساختار داده هش نیاز به خطوط زیادی از کد برای تبدیل از یک فرمت به فرمت دیگر دارد.

Redis دارای ساختارهای داده بومی و گزینه های زیادی برای دست‌کاری و تعامل با داده های شما است، بیش از صد مشتری منبع باز برای توسعه دهندگان Redis در دسترس است، زبان های پشتیبانی شده عبارتند از Java، Python، PHP، C، C++، C#، JavaScript، Node.js، Ruby، R، Go و بسیاری دیگر…

تکرار و ماندگاری

Redis از یک معماری replica اولیه استفاده می کند و از همانندسازی ناهمزمان پشتیبانی می کند که در آن داده ها می توانند به چندین سرور replica کپی شوند؛ برای تداوم، Redis از پشتیبان گیری نقطه در زمان (کپی کردن مجموعه داده های Redis در دیسک) پشتیبانی می کند.

Redis برای اینکه یک پایگاه داده بادوام و سازگار باشد ساخته نشده است، اگر به یک پایگاه داده بادوام و سازگار با Redis نیاز دارید، Amazon MemoryDB را برای Redis در نظر بگیرید.

از آنجایی که MemoryDB از یک گزارش تراکنش بادوام استفاده می کند که داده ها را در چندین منطقه در دسترس (AZ) ذخیره می کند، می توانید از آن به عنوان پایگاه داده اصلی خود استفاده کنید، MemoryDB به طور هدفمند ساخته شده است تا توسعه دهندگان را قادر به استفاده از Redis API بدون نگرانی در مورد مدیریت یک کش جداگانه، پایگاه داده یا زیرساخت زیربنایی کنند.

در دسترس بودن و مقیاس پذیری بالا

Redis یک معماری replica اولیه را در یک گره اولیه یا یک توپولوژی خوشه ای ارائه می دهد؛ این به شما امکان می دهد راه حل های بسیار در دسترس را ایجاد کنید که عملکرد و قابلیت اطمینان ثابتی را ارائه می دهند.

متن باز

Redis یک سرویس منبع باز است که توسط AWS نیز پشتیبانی می شود، Redis مبتنی بر استانداردهای باز است، از فرمت های داده باز پشتیبانی می کند و دارای مجموعه ای غنی از مشتریان است.

موارد استفاده محبوب Redis

ذخیره سازی

در نگاهی دیگر، Redis یک انتخاب عالی برای پیاده‌سازی یک کش در حافظه بسیار در دسترس برای کاهش تأخیر دسترسی به داده‌ها، افزایش توان عملیاتی و کاهش بارگیری از پایگاه داده و برنامه ارتباطی یا NoSQL است.

Redis می‌تواند مواردی که اغلب درخواست می‌شود را در زمان‌های پاسخ زیر میلی‌ثانیه ارائه دهد و به شما امکان می‌دهد تا به راحتی برای بارهای بالاتر بدون افزایش هزینه‌های گران‌تر مقیاس کنید، ذخیره‌سازی نتایج پرس‌وجو در پایگاه داده، ذخیره‌سازی مداوم جلسه، ذخیره‌سازی صفحه وب و ذخیره اشیاء پرکاربرد مانند تصاویر، فایل‌ها و ابر داده‌ها، همگی نمونه‌های محبوب ذخیره‌سازی با Redis هستند.

چت، پیام رسانی و صف

Redis از Pub/Sub با تطبیق الگو و انواع ساختارهای داده مانند لیست ها، مجموعه های مرتب شده و هش ها پشتیبانی می کند؛ همین مورد نیز به Redis اجازه می‌دهد تا از اتاق‌های چت با کارایی بالا، جریان‌های نظرات بی‌درنگ، فید رسانه‌های اجتماعی و ارتباط بین سرور را پشتیبانی کند، ساختار داده Redis List اجرای یک صف سبک را آسان می کند.

فهرست‌ها قابلیت مسدود کردن را ارائه می‌دهند و آنها را برای انواع برنامه‌هایی که به یک کارگزار پیام قابل اعتماد یا یک لیست دایره‌ای نیاز دارند، مناسب می‌سازند.

تابلوهای امتیازات بازی

Redis یک انتخاب محبوب در میان توسعه دهندگان بازی است که به دنبال ساخت تابلوهای امتیازات بلادرنگ هستند، به سادگی از ساختار داده Redis Sorted Set استفاده کنید که منحصر به فرد بودن عناصر را در عین حفظ لیست مرتب شده بر اساس امتیازات کاربران فراهم می کند؛ ایجاد یک لیست رتبه‌بندی بلادرنگ به آسانی به‌روزرسانی امتیاز کاربر در هر بار تغییر است.

همچنین می توانید از مجموعه های مرتب شده برای مدیریت داده های سری زمانی با استفاده از مهرهای زمانی به عنوان امتیاز استفاده کنید.

فروشگاه جلسه

Redis به عنوان یک فروشگاه داده در حافظه با در دسترس بودن و ماندگاری بالا یک انتخاب محبوب در میان توسعه دهندگان برنامه برای ذخیره و مدیریت داده های جلسه برای برنامه های کاربردی در مقیاس اینترنت است، Redis تأخیر زیر میلی‌ثانیه‌ای، مقیاس و انعطاف‌پذیری مورد نیاز برای مدیریت داده‌های جلسه مانند نمایه‌های کاربر، اعتبارنامه‌ها، وضعیت جلسه و شخصی‌سازی خاص کاربر را فراهم می‌کند.

پخش رسانه ای غنی

Redis یک فروشگاه داده سریع و درون حافظه برای استفاده از موارد استفاده از پخش زنده ارائه می دهد، Redis را می توان برای ذخیره ابرداده در مورد نمایه های کاربران و تاریخچه مشاهده، اطلاعات / نشانه های احراز هویت برای میلیون ها کاربر و فایل های مانیفست برای فعال کردن CDN ها برای پخش ویدیوها برای میلیون ها کاربر تلفن همراه و دسکتاپ در یک زمان استفاده کرد.

جغرافیایی

Redis ساختارها و اپراتورهای داده در حافظه را برای مدیریت داده های مکانی در زمان واقعی در مقیاس و سرعت ارائه می دهد. دستوراتی مانند GEOADD، GEODIST، GEORADIUS و GEORADIUSBYMEMBER برای ذخیره، پردازش و تجزیه و تحلیل داده‌های مکانی به صورت بلادرنگ، فضای مکانی را با Redis آسان و سریع می‌کنند. می توانید از Redis برای افزودن ویژگی های مبتنی بر مکان مانند زمان رانندگی، مسافت رانندگی و نقاط مورد علاقه به برنامه های خود استفاده کنید.

فراگیری ماشین

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

Redis به شما یک ذخیره‌سازی سریع داده در حافظه می‌دهد تا مدل‌های یادگیری ماشین را بسازید، آموزش دهید و به سرعت بکار ببرید.

تجزیه و تحلیل زمان واقعی

Redis را می‌توان با راه‌حل‌های استریم مانند Apache Kafka و Amazon Kinesis به‌ عنوان یک ذخیره‌سازی داده در حافظه برای جذب، پردازش داده‌های بلادرنگ با تأخیر زیر میلی‌ثانیه استفاده کرد؛ Redis یک انتخاب ایده آل برای موارد استفاده از تجزیه و تحلیل بلادرنگ مانند رسانه های اجتماعی، هدف گذاری تبلیغات، شخصی سازی و IoT است.

انواع داده Redis

Redis یک ذخیره‌سازی کلید-مقدار است، اما بسیاری از انواع ساختارهای داده را به‌عنوان مقادیری غیر از رشته‌ها پشتیبانی می‌کند؛ کلید در Redis یک رشته ایمن باینری است که حداکثر اندازه آن ۵۱۲ مگابایت است.

در ادامه برای انواع داده هایی که در مقادیر پشتیبانی می شوند توضیحاتی را نیز خواهیم داشت:

رشته

یک رشته در Redis دنباله ای از بایت است. آن‌ها باینری امن هستند، بنابراین طول مشخصی دارند که توسط هیچ کاراکتر پایانی تعیین نمی شود، شما می توانید تا ۵۱۲ مگابایت را در یک رشته Redis ذخیره کنید؛ این می تواند هر نوع داده ای مانند متن، اعداد صحیح، شناورها، فیلم ها، تصاویر یا فایل های صوتی را ذخیره کند.

لیست

منظور از لیست در Redis، لیستی از رشته ها هستند که بر اساس ترتیب درج مرتب شده اند، بنابراین عناصر در یک لیست پیوندی ذخیره می شوند. اگر لازم باشد عنصری را در لیستی با ۵۰۰ رکورد وارد کنیم، به همان میزان زمان اضافه کردن عنصر به لیست ۵۰۰۰۰ رکورد طول می کشد.

مجموعه ها

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

وقتی می‌خواهیم داده‌ها را در جایی که منحصربه‌فرد بودن مهم است ذخیره کنیم، مجموعه‌ها مفید هستند. به عنوان مثال، ذخیره تعداد بازدیدکنندگان منحصر به فرد یک وب سایت.

مجموعه های مرتب شده

می‌توانیم عناصر را با یک نوع مقدار Sorted Set مرتب کنیم؛ هر عنصر اراده با یک عدد همراه است که آن را امتیاز می نامیم. این ترتیب را مشخص می کند.

هش

در Redis، نوع مقدار هش یک جفت فیلد-مقدار است؛ آن‌ها برای نمایش اشیا استفاده می شوند، اما می توانند عناصر زیادی را ذخیره کنند و برای کارهای دیگر نیز مفید هستند، یک هش فضای بسیار کمی را اشغال می کند، بنابراین می توانید میلیون ها شی را در یک نمونه هش کوچک ذخیره کنید.

فرض کنید می خواهیم اطلاعات مربوط به نمرات دانش آموزان را ذخیره کنیم؛ موضوع می تواند کلید باشد، مقدار می تواند یک جفت فیلد-مقدار باشد که فیلد نام دانش آموز و مقدار نمره آن ها باشد.

تکثیر داده ها در Redis

هنگامی که داده ها در سرور ذخیره می شوند و سرور خراب می شود، داده ها ممکن است از بین بروند، برای جلوگیری از این مشکل از تکنیک تکرار داده ها استفاده می کنیم؛ این اساساً به این معنی است که داده ها در دو یا چند سرور برای جلوگیری از تلفات یا خرابی ها ذخیره می شوند، تکرار داده ها همچنین بار روی سرورهای ما را کاهش می دهد، زیرا درخواست های کاربر در بار متعادل هستند.

Redis از یک رویکرد رهبر/پیرو برای تکرار داده های مبتنی بر سرور پیروی می کند؛ یکی از سرورها لیدر است و سرورهای دیگر فالوور هستند که همگی به لیدر متصل هستند.

اگر فالوور قطع شود، به طور خودکار دوباره متصل می شود و دقیقاً لیدر را تکرار می کند، این کار از طریق دو روش قابل انجام است:

  • همگام سازی جزئی
  • همگام سازی کامل

در Redis، فرآیند تکثیر ناهمزمان است، سرورهای دنبال کننده به طور ناهمزمان داده ها را تأیید می کنند.

ماندگاری

از آنجایی که Redis یک پایگاه داده در حافظه است، داده ها در حافظه (یا RAM) ذخیره می شوند؛ اگر سرور از کار بیفتد، تمام داده های ذخیره شده از بین می رود، Redis دارای مکانیسم های پشتیبان گیری برای داده های روی دیسک است، به این ترتیب، هنگام راه اندازی مجدد سرور، داده ها از دیسک به حافظه بارگذاری می شوند.

Redis دو گزینه پایداری دارد:

  • پایداری RDB (تصویربرداری فوری): عکس های فوری از داده ها در یک دیسک در یک فایل rdb ذخیره می شوند، دوام بستگی به دفعات ریختن داده ها به دیسک دارد.
  • تداوم فایل فقط پیوست (AOF): هر عملیات نوشتنی که توسط سرور دریافت می‌شود در یک فایل ثبت می‌شود، بنابراین تمام دستورات موجود در فایل AOF هنگام راه‌اندازی مجدد دوباره اجرا می‌شوند.

کش سمت کلاینت

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

Redis پشتیبانی از کش سمت مشتری را ارائه می دهد که به آن ردیابی می گویند. دو رویکرد متفاوت وجود دارد:

  • حالت پیش فرض: سرور اطلاعات مربوط به اینکه کدام کلید توسط کدام سرویس گیرنده ذخیره شده است را ذخیره می کند. اگر یک کلید تغییر کند، سرور پیام را فقط برای مشتریان مربوطه ارسال می کند.
  • حالت پخش: سرور نیازی به پیگیری کلیدهای ذخیره شده توسط مشتریان ندارد. درعوض، مشتریان مشترک پیشوندهای کلید می شوند و هنگامی که از کلیدی مطابق با یک پیشوند خاص استفاده می شود، پیام های اعلان دریافت می کنند.
برای امتیاز به این نوشته کلیک کنید!
[کل: ۴ میانگین: ۵]