В рамках проекта in-memory key-value реализована база данных с HTTP интерфейсом,возможностью персистентного хранения и автоматического удаления устаревших записей.
Все ключи базы данных - строки. По одному ключу может быть только одно значение одного из типов. Значения базы данных могут быть одним из следующих типов:
- скалярами
- словарь
- массивами
Скаляр - единичное значения типа строка либо целое число.
Возвращает значение по ключу key. Если по ключу нет значения, возвращается ошибка.
Устанавливает значение по ключу key равным value. Если указан дополнительный параметр ex seconds, значение очищается через заданное количество секунд. Значение seconds 0 означает хранение без ограничений по времени.
Словарь - структура, хранящая в своих полях скаляры. Поле мапы задается строковым ключем. С помощью словаря можно по определенному ключу нашей базы данных положить не просто одно значение, а набор полей.
Устанавливает поле словаря field, являющимся значением по ключу key равным value. Если значение указанного ключа (key) является другим типом, возвращается ошибка. Возвращает количество затронутых полей.
Возвращает значение поля field словаря по ключу key. Если по ключу key находится другой тип, возвращается ошибка. Если значение поля field не задано или значение по ключу key не задано, возвращается ошибка.
Массив позволяет по определенному ключу базы данных хранить упорядоченный массив скаляров.
Вставляет элементы слева в список по ключу key. Если элементов несколько, они вставляются так, как будто для каждого из них по порядку была бы вызвана эта команда. Если значения по ключу не существовало, список создается.
Вставляет элементы справа в список по ключу key. Если элементов несколько, они вставляются так, как будто для каждого из них по порядку была бы вызвана эта команда. Если значения по ключу не существовало, список создается.
Вставляет справа в список по ключу key элементы, которых еще нет в списке. Если элементов несколько, они вставляются так, как будто для каждого из них по порядку была бы вызвана эта команда. Если значения по ключу не существовало, список создается.
Удаляет и возвращает элемент слева списка. Параметр count - количество удаляемых элементов, может быть либо единственным числом - тогда это количество элементов с края, либо двумя числами - тогда это индексы первого и последнего удаляемых элементов. Индексы могут быть отрицательными для доступа с конца списка. Если количество удаляемых элементов превышает количество элементов в списке, возвращается доступное количество.
Удаляет и возвращает элемент слева списка. Параметр count - количество удаляемых элементов, может быть либо единственным числом - тогда это количество элементов с края, либо двумя числами - тогда это индексы первого и последнего удаляемых элементов. Индексы могут быть отрицательными для доступа с конца списка. Если количество удаляемых элементо превышает количество элементов в списке, возвращается доступное количество.
Устанавливает значение элемента с индексом index списка по ключу key равным element. Если элемента с этим индексом не существует, возвращается ошибка.
Получает значение элемента с индексом index из списка по ключу key. Если элемента с этим индексом не существует, возвращается ошибка.
Для любого ключа базы данных можно явно задать время жизни в секундах. После истечения времени жизни ключа все операции по этому ключу должны работать так, как будто этого ключа нет в базе данных. Если по указанному ключу существует значение, возвращает 1, иначе 0.
База данных переодически сохраняет свое состояние на диск для восстановления после сбоев. Для сохранения состояния базы данных используется Postgres. При запуске база данных проверяет наличие состояния и восстанавливает данные из него (если файл состояния есть).
Приложение и его база данных Postgres поднимается c помощью docker-compose.
Приложение оснащено тестами и бенчмарками.