Skip to content

Simple one-thread memcache daemon written in pure php with custom data structures.

Notifications You must be signed in to change notification settings

agasiev/simple_memc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Реализация простого мемкэша (без вытеснения ключей по превышению памяти) + веб клиент через который можно делать к нему запросы.

Написано на PHP 5.6 без использования ООП + pcntl + posix.
Протестировано на Ubuntu 14.04.2 LTS + Apache/2.4.7.

Описание

Для реализации key-value хранилища была реализована хэш-таблица с открытой адресацией. По умолчанию в качестве функции хэширования используется crc32 (при желании можно заменить на что угодно, например на MurmurHash).

В данной задаче я использую PHP массивы как C'style массивы и игнорирую их реальное внутреннее устройство (в принципе, можно было бы использовать альтернативные реализации массивов, экономящие память и работающие быстрее).

Саму хэш таблицу можно улучшить как минимум следующими шагами:

  • Реализовать другую политику расширения (например: чистить только удаленные, а не увеличивать размер таблицы при каждом вызове _dict_extend()).
  • Хранить посчитаный хэш от ключа в самой таблице, чтобы не вычислять его заново при перестроении.
  • Реализовать уменьшение размерности хэш таблицы если пустых ячеек стало слишком много после очистки.

Время жизни ключа заканчивается только при запросе GET к нему либо при перестроении таблицы. В принципе можно реализовать подобное и на SET запрос, но тогда он будет выполняться медленнее.

Запуск

Демон поддерживает следующие параметры командной строки:

  • -p Путь к pid файлу
  • -P Порт на котором будет работать демон (по умолчанию 12345)
  • -h Имя хоста (по умолчанию 127.0.0.1)
  • -l Папка для записи логов

Команды

Поддерживается ограниченный набор команд:

  • get [key_name]
  • set [key_name] [TTL]\r\n[store data]
  • delete [key_name]
  • flush_all
  • stats

Для команды set, TTL указывается в секундах от 0 до 30 суток. 0 - означает хранить вечно.

Команда stats возвращает текущее состояние демона. Например:

stats

STAT uptime 961 # Время работы демона в секундах с момента запуска
STAT version 0.0.0.1 # Версия демона
STAT hashtable_size 1024 # Текущий размер хэш-таблицы
STAT hashtable_free 1020 # Кол-во не занятых элементов в таблице
STAT hashtable_deleted 1 # Кол-во известных ключей, помеченных как удаленные
END

В веб интерфейсе, для удобства, имя команды не надо вводить, а можно выбрать из выпадающего списка.

Примеры работы

Alt

Alt

Alt

About

Simple one-thread memcache daemon written in pure php with custom data structures.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages