Skip to content

oleksiivorobiov/memcached_analog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

задача

Необхідно реалізувати простий аналог memcached серевера, який приймає наступні команди:

  • get (key);
  • set (key, value, expires?) (з можливістю, опціонально, задати період зберігання записів у секундах, по замовчуванню період зберігання не обмежений)
  • delete (key).

Сервер повинен вміти обслуговувати одночасно кількох клієнтів (паралельно). У одній сесії клієнт може виконувати кілька запитів. Дані зберігати у пам'яті та у файлі, доступ до якого відбувається через mmap. По сигналу USR1 створювати файл у /tmp зі списком записів ('key' -> 'value'). Протокол — текстовий (можна зробити повністю сумісним із memcached).

Платформа - POSIX (FreeBSD/Linux). Використання посторонніх бібліотек дозволяється. Бажано по можливості використовувати Стандартну Бібліотеку С++ (С++11). Є небажаним заміна компонентів, які існують у Стандартній Бібліотеці компонентами з інших бібліотек (напр. std::thread на boost::thread, std::vectorstd::unique_ptr на boost::ptr_vector). Додаткові бали за абстрагування прошарку збереження даних (для можливості легкої зміни сховища даних – файл, БД, ітд.), за абстрагування моделі обробки з'єднань (напр: fork / pre-fork / threaded / event-based) від роботи з текстовим протоколом.

реализация

библиотеки

  • gtest - для юнит-тестирования
  • asio - для сокетов

классы

Cache - содержит логику кеширования и очистки кеша по time-to-leave MemoryStorage / MmapStorage - хранение данных в памяти или память+файл ThreadedServer / AsyncServer - логика обработки соединений Protocol - логика текстового протокола

компиляция

Нужно использовать gcc 4.9, 4.8 не поддерживает std::regex, тесты не проходят. Если нету 4.9 запускать memcached_analog_gcc49_64

git submodule update --init
cd  memcached_analog
make

запуск

./memcached_analog 1234 

запуск юнит-тестов

./memcached_analog test

проверка при помощи telnet

telnet localhost 1234

todo

  • use socket.read_until
  • удалять записи из invalidator-контейнера

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published