برای یک وبسرویس با ترافیک بالا، واجب است که از نوعی مکانیزم caching بهره ببرد. Caching راهی برای ذخیره دادههای محاسبه شده در رم است، تا در آینده درخواستها بتوانند به سرعت حاضر شوند. همچنین اگر این کار با استراتژی مناسب پیادهسازی شود، از برخی ارجاعها به لایه دادهها و محاسباتی در کنارههای برنامه جلوگیری میکند. Redis و Memcached دو عدد از معروفترین مخازن موجود، بر پایه رم هستند. در این پست، برخی از مفاهیم کلیدی Redis را بررسی میکنیم و به برخی دستورت اساسی نگاهی میاندازیم. Redis جدا از caching، میتواند برای برنامههای دیگری که در آنها نیازی به دسترسی سریع و مکرر به دادهها وجود ندارد نیز استفاده شود.
Redis
Redis یک مخزن ساختار داده در داخل رم است، که از بسیاری انواع داده مانند رشتهها، hashها، setها، setهای مرتب شده و... پشتیبانی میکند. به طور اساسی، Redis یک مخزن مقادیر کلیدی است.
هر نوعی از مقدار داخل Redis در قبال کلیدی که به طور باینری امن است، ذخیره شده است و این مقدار میتواند هر چیزی از یک رشته خالی گرفته تا یک رشته hash طولانی باشد. هر برنامهای باید از یک نقشه از پیش طرح شده برای نامگذاری کلیدهای Redis همایت کند، تا از هر اختلالی در نامگذاری جلوگیری شود.
راهاندازی Redis
به مانند هر دیتابیس دیگری، Redis دارای یک سرور برای ذخیره دادهها در رم و کلاینتها است که در قبال یک سرور، دستوراتی را اجرا میکند. برای راهاندازی سرور بر روی دستگاه خود، استفاده از Docker را پیشنهاد میکنم؛ زیرا شروع کار با آن بسیار ساده است. اگر Docker daemon را بر روی سیستم خود دارید، این دستور را اجرا کنید:
docker run --rm -it --name local-redis -p 6379:6379 redis
این دستور یک محفظه Docker با نام «local-redis» را بر روی localhost شما با پورت 6379 اجرا میکند. این دستور از تصویر رسمی Redis docker برای اجرای محفظه استفاده میکند.
برای کلاینت، میتوانیم از redis-cli برای اجرای دستورات از کنسول بر روی سرور Redis استفاده کنیم. یک تب جدید باز کنید، و دستور زیر را برای شروع یک redis-cli session که به یک نمونه سرور Redis داخلی متصل است، استفاده کنید:
docker run -it --link local-redis:redis --rm redis redis-cli -h redis -p 6379
حال میتوانیم شروع به اجرای چند دستور پایه Redis کنیم.
دستورات
- تنظیم یک مقدار
سینتکس: SET <key> <value>
مثال: SET firstname Albert - بازیابی یک مقدار
سینتکس: GET <key>
مثال: GET firstname - بررسی وجود یک کلید
سینتکس: EXISTS <key> - حذف یک کلید
یک کلید میتواند همراه با حافظه مربوطه، به صورت زیر حذف شود.
DEL <key>
این یک عملیات blocking همگام است.
روشی بهتر برای حذف کلیدها، لغو ارتباط آنها است، که حافظه مربوط به آنها میتواند بعدا جمعآوری شود.
UNLINK <key> - تعیین تاریخ انقضا برای یک کلید
EXPIRE <key> <seconds>
PEXPIRE <key> <milliseconds> - تنظیم یک کلید، بررسی وجود آن و تاریخ انقضا به طور همزمان
سینتکس: SET <key> <value> <EX seconds>|<PX milliseconds> NX|NX
NX - فقط وقتی که یک کلید وجود ندارد، تنظیم کن.
XX - فقط وقتی که یک کلید از قبل وجود دارد، تنظیم کن.
EX - زمان انقضا را برای کلید بر حسب ثانیه تعیین میکند.
PX - زمان انقضا را برای کلید بر حسب میلی ثانیه تعیین میکند.
مثال:
SET firstname Albert EX 10 NX
این دستور، کلید firstname را با زمان انقاضی 10 ثانیه، فقط وقتی که کلید مورد نظر وجود ندارد، مساوی با مقدار «Albert» قرار میدهد - افزایش یا کاهش یک مقدار integer
Redis روش مناسبی برای افزایش یا کاهش مقادیر integer که شاید به عنوان شمارنده استفاده شوند، فراهم کرده است.
سینتکس:
INCR <key>
DECR <key>
INCRBY <key> <increment value>
DECRBY <key> <decrement value>
مثال:
SET counter 4
INCRBY counter 6
کلید شمارنده در هنگام شروع مقدار ۴ را خواهد داشت، و پس از دستور دوم، به 10 افزایش خواهد یافت.
تمام دستورات اشاره شده در بالا فقط برای ذخیرهسازی و دستکاری رشتهها و مقادیر integer بودند. ساختارهای داده دیگری مانند hashها، setها، آرایههای bit و... نیز وجود دارند، که میتوانند برای حل مشکلات پیچیده استفاده شوند.
- برای یادگیری کاملتر Redis میتونید از دوره ویدیو و آنلاین وبسایت راکت با عنوان آموزش ردیس Redis استفاده کنید
مثالهای واقعی
در یک برنامه واقعی، میتوانید از زبانهای برنامهنویسی مختلفی که مختص کلاینتهای Redis هستند برای تعامل با سرور Redis خود از طریق کد برنامه استفاده کنید.
ما یک برنامه ساده بر پایه Node خواهیم نوشت که یک endpoint برای گرفتن اطلاعات کاربر در قبال آیدی او را دارد. یک فایل JSON به عنوان دیتابیس ما عمل خواهد کرد، تا همه چیز را در حد ممکن ساده نگه داریم.
ابتدا، با استفاده از دستور npm init یک مخزن NPM را راهاندازی کنید، و سپس express و redis را به عنوان Dependency نصب کنید.
حال، یک فایل کمکی Redis بسازید، که نمونهای از یک کلاینت Redis متصل به سرور Redis را شکل میدهد. همچنین چند متد کمکی cache برای route handlerهای خود مینویسیم.
در فایل اصلی برنامه، یک route handler بنویسید که آیدی کاربری که قرار است اطلاعاتش بازیابی شود را میپذیرد. این کلید، همیشه برای تمام درخواستهای یک آیدی داده شده مشابه خواهد بود. وجود این کلید را در Cache بررسی کنید و اگر پاسخی یافت شد، آن را برگردانید.
در غیر این صورت، دادهها را از منبع داده خود کوئری کرده، و قبل از این که دادههای دریافتی را به Redis cahce ارسال کنیم، آنها را تنظیم میکنیم.
تبریک! حال شما اساس Redis را یاد گرفتهاید. برای یادگیری کاملتر Redis میتونید از دوره ویدیو و آنلاین وبسایت راکت با عنوان آموزش ردیس Redis استفاده کنید. یا میتونید از این repo یک مثال ساده از راه اندازه Redis رو ببینید.
همچنین شما میتونید از طریق مستندات وبسایت Redis هم استفاده کنید
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید