Skip to content

Mockird31/Cacher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CACHE STORE

Команды:

  • SET KEY VAL [SECONDS] KEY - ключ. VAL - данные. SECONDS - время в секундах, сколько будет храниться значение. Создает новую запись. Если уже существует запись с таким ключом, то при новой записи, время хранения, которое было записано первый раз, сотрется.

  • GET KEY KEY - ключ. Получает значение по ключу, если ключа не существует, то выведет nil.

  • EXPIRE KEY SECONDS KEY - ключ. SECONDS - время в секундах, сколько будет храниться значение. Устанавливает время хранения для значения по ключу.

  • TTL KEY KEY - ключ. Возвращает оставшееся время хранения значения в секундах по ключу.

  • PING Возвращает PONG, если сервер работает.

Добавление команды

Для добавления команды нужно сначала реализовать её функционал работы с данными в файле cache.py. Затем необходимо написать команду - класс, наследуемый об абстрактного класса Command, вызывающий метод, который был создан в cache.py. Затем необходимо зарегестрировать команду в файле server.py в словаре commands, где ключ - название команды, а значение - класс этой команды.

Инструкция по запуску

Есть возможность запустить приложение в Docker'e - для этого необходимо приложение Docker Desktop и makefile. Для начала запустить приложение Docker Desktop и выполнить в терминале команду make docker-up.

Для запуска приложения без докера необходимо установить Python и make. Затем необходимо выполнить команду make run.

Для запуска тестов понадобится библиотека pytest. Для запуска тестов введити в консоль команду make run_tests.

Рефлексия

Способ хранения данных

Так как был реализован аналог Redis'a, то данные хранятся в оперативной памяти сервера, но, в качестве альтернативы, можно было рассмотреть хранение данных на диске, гибридное хранение (какая-то часть данных в памяти, какая-то часть на диске). Хранение данных в оперативной памяти обеспечивает максимальную скорость доступа, довольно просто было реализовать и протестировать приложение.

Механизм обработки истечения срока действия ключей

В Redis используется вероятностное удаление (периодически запускается фоновый процесс, который случайным образом выбирает подмножество ключей с TTL, и среди выбранных ключей удаляются просроченные, если процент истёкших ключей в выборке высокий, цикл повторяется чаще). В моем приложении запускается фоновый поток, который раз в час проходится по словарю с ключами, для которых установлен TTL, и удаляет все просроченные записи. Используемый мной вариант проще в реализации и тестировании.

Протокол коммуникации

Мною был реализован обычный текстовый протокол, похожий на тот, который использует сам Redis. Данная реализация обеспечивает простоту отладки, легкость реализации клиентов на разных языках программирования. Также можно было бы использовать REST API через HTTP, либо gRPC для высокопроизводительного обмена.

About

Implementation of cache store in python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors