
Что надо для сервера кеша? В основном хеш-таблица, сетевой доступ к ней и средства удаления устаревших записей.
Для реализации хеш-таблицы я выбрал бинарное дерево (возможно, не лучший способ) с разрешением коллизий на основе цепочек. Сетевой интерфейс был реализован с помощью неблокирующих сокетов.
Для работы с сервером я накидал простенький текстовый протокол из трех команд: GET, PUT, REMOVE.
Запросить данные по ключу:
GET <key-len> <key>\r\n
Варианты ответа:
- NODATA\r\n
- DATA <data-len> <data>\r\n
PUT <key-len> <key> <data-len>\r\n
<data>\r\n
Варианты ответа:
- SUCCESS\r\n
- HIT\r\n (если переданные данные соответсвуют данным в кеше)
- FAILURE\r\n
REMOVE <key-len> <key>\r\n
Варианты ответа:
- SUCCESS\r\n
- FAILURE\r\n
В надежде на увлекательную совместную разработку я выложил свои разработки на github'е. Я очень надеюсь, что найду талантливых программистов среди пользователей хабра. Адрес проекта на github: github.com/mdevils/encached
Буду благодарен если подскажете хороший способ организации потоко-безопасной хеш-таблицы.
Планы по разработке сервера
Новые команды: APPEND, PREPEND, INC, DEC, CAS (Compare and Swap), STAT, TAG (тегировать запись).
Полная поддержка многопоточной записи/чтения без блокировок.
Контроль занимаемой памяти.
Работа под Windows.
Сейчас демон работает на 2332 порту под Linux (x86, x86_64), Mac OS X (x86, x86_64). Возможно будет работать под BSD, не имею возможности протестировать.
Собирается сервер как обычно — командой make. Запускается с аргументом "-r". На машине должен быть установлен FreePascal версии 2.4.0.
P.S. С Новым Годом!