Как HTTP-кеши хранят свои запросы?Существует ли обычно используемый протокол для кэширования запросов или у каждой реализации есть свой метод кэширования?
РЕДАКТИРОВАТЬ : Под этим я подразумеваю, как серверы ФИЗИЧЕСКИ хранят кэшированные запросы, когда решение о кэшировании уже принято.
Я просматривал функциональность некоторых реализаций HTTP-кэша, таких как polipo , и обнаружил, что они хранят (по крайней мере) часть своего кэша в локальной файловой системе, но позже обнаружил, что кеши nginxфайлы / содержимое файла (имеется в виду, что есть более эффективный способ доступа к обналиченным запросам, чем их хранение в файловой системе).
Я поигрался с возможными идеями и попытался реализовать этот метод:
Hash request message -> store in a AVL -> access later using the hash value
Таким образом, проще и разумнее осуществлять поиск по AVL, чтобы увидеть, обслуживался ли запрос раньше.Узел дерева AVL имеет указатель на содержимое запросов, таким образом они остаются в основной памяти.
И я использовал это как хеш-функцию:
static int hash( int size, request_t* bst_l) {
unsigned long int hashval;
int i = 0;
// Convert our string to an integer
while( hashval < ULONG_MAX && i < strlen( bst_l->MSG ) ) {
hashval = hashval << 8;
hashval += bst_l->MSG[ i ];
i++;
}
return hashval % size;
}
, где размер - это размердерево AVL.
Исходя из этого, я ожидал уникальное значение хеш-функции для каждого уникального сообщения.Хотя я продолжаю получать одинаковые значения хеш-функции для разных запросов.Это из-за строки (hashval% size)?
Является ли вышеуказанный метод хорошим с точки зрения масштабируемости и эффективности?и если да, то хэш-функция соответствует ей правильно?Или есть более распространенный метод хеширования запросов?