محمد برنامهنویسی است که برای سرعت اجرای نرمافزار اهمیت ویژهای قائل است. برای همین منظور او پیشنهاد داده که ذخیرهسازی اطلاعات مربوط به هدر `CLIENT-KEY`، در دیتابیس `Redis` انجام شود. در نتیجه شما باید پاسخی که برای [سوال دوم مسابقه](https://quera.ir/contest/assignments/35250/problems/128198) ارسال کردهاید را به گونهای تغییر دهید که از `Redis` برای خواندن و ذخیرهسازی اطلاعات استفاده کند.
برای دانلود پروژهی اولیه روی [این لینک](/contest/assignments/35250/download_problem_initial_project/128196/) کلیک کنید.
## کانتینرها
در ابتدای کار، برای پیاده سازی این سیستم، نیاز است که فایل `docker-compose.yml` را تکمیل کنید. توجه کنید که امکان *build* کردن یک *Image* جدید را دارید. برای دیتابیس `Redis` میتوانید از *image* زیر استفاده نمایید:
```
registry.gitlab.com/qio/standard/redis:latest
```
توجه داشته باشید که باید فایل `docker-compose.yml` را به شکلی تکمیل کنید که پس از `up` کردن آن، هر ۲ کانتینر (*Api*, *Redis*) به درستی اجرا شوند. سپس با توجه به درخواستهایی که از سمت سیستم داوری برای `api` ارسال میشود، باید کلیدهای `CLIENT-KEY` در دیتابیس `Redis` ذخیره شده باشد. در غیر این صورت نمره کامل به شما تعلق نمیگیرد.
### شرایط *containerها*
۱. نام containerها باید حتماً به شکل زیر باشد:
```
api
redis
```
۲. هریک از این containerها باید روی پورت مشخصی که مربوط به آنها میباشد قرار گیرند. دقیقاً به شکل زیر:
```
port of api = 80
port of redis = 6379
```
دقت کنید که تنظیمات پورتها به گونهای انجام شود که وقتی سیستم داوری دستور `docker-compose up` را اجرا کرد، بتواند به هر دو پورت ۸۰ و ۶۳۷۹ دسترسی داشته باشد.
۳. نام دیتابیس ردیس که ذخیره سازی باید در آن انجام شود، `0` است.
۴. هر کلید باید بصورت جداگانه در `Redis` ذخیره شود. به این صورت که اگر n بار درخواست با هدر `CLIENT-KEY=test` ارسال شد، دیتا باید به گونهای ذخیره شده باشد که اگر از `Redis` کلید `test` خوانده شود، مقدار n را برگرداند.
### ایجاد *Volume*
در صورتیکه نیاز دارید فایل یا مسیری را به درون هریک از *containerها Volume* کنید، میتوانید از پوشهای به نام `api` استفاده کنید.
```
services:
sample_container:
build: ./api
volumes:
- ./api/somefile:/somefile
```
فراموش نکنید که فایل `somefile` را درون پوشهی `api` قرارداده و آن را برای داوری ارسال نمایید. برای مثال، پوشهی ارسالی شما برای داوری کوئرا به شکل زیر میتواند باشد:
```
.
├── api
│ └── somefile
└── docker-compose.yml
```
\**توجه:** سیستم داوری کوئرا بهصورت خودکار فایل `docker-compose.yml` را با کامند `up` اجرا میکند. شما نیازی به کد یا اسکریپتی برای اجرای این کار ندارید.
## نحوه ارسال پاسخ
شما فقط میتوانید مسیرهای هایلایت شده را تغییر دهید:
```
.
├── <mark class="yellow" title="این پوشه را میتوانید تغییر دهید"> api </mark>
│ └── ...
└── <mark class="yellow" title="این فایل را میتوانید تغییر دهید"> docker-compose.yml </mark>
```
در نهایت این پوشه را *zip* کرده و ارسال کنید. توجه کنید که پس از *extract* کردن فایل *zip* شما، باید فایل `docker-compose.yml` را ببینیم.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.