Nginx как получить значение переменной в nginx из memcached

fixxxer

К.О.
Партнер клуба
Такую эту задачу внешним кэшированием решать - это какое-то адское извращение. Может, просто послать упоминаемого пионэра лесом?

Я, когда подобное делал, хитро извратился. Точно не помню, но примерно так:

0. Положим, что там прямо полный честный рандом нафиг не нужен, достаточно "похожести".

1. Берется вспомогательная таблица OrderTable(id references MainTable(id), order_idx default floor(rand() * 1000000000000000), sequence_id).
Сиквенсов ограниченное количество. Ну, скажем, 10.
При добавлении записи в основную таблицу делаем 10 инсертов с sequence_id 1..10.

2. Для каждого уникального посетителя генерируем и сохраняем в куке/сессии $srand_seed_value.

3. Инициализируем генератор случайных чисел этим seed value, получаем оттуда два числа - $sequence_id 1..10 и boolean $desc_order.

4. В случае memcache miss, делаем
select * from MainTable inner join OrderTable using (id) where sequence_id = $sequence_id order by order_idx {$desc_order ? 'DESC' : 'ASC'} limit ... offset ...

5. делаем полученному shuffle и кладем в мемкеш с ключиком ($srand_seed_value, номер страницы)
 

Redjik

Джедай-мастер
но есть 1 нюанс.... квартиры со всех городов(домен 3го или 2го уронвня) падают в одну таблицу, хотя...
 

fixxxer

К.О.
Партнер клуба
ну так добавляем все условия в where и мемкеш-ключик, чо.

главное explain-ы смотреть и индексы правильные строить
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
fixxxer
идея неплохая - новый sequence можно генерить каждые 10 минут, а srand_seed_value присваивать всем пользователям в течение периода времени
 

fixxxer

К.О.
Партнер клуба
Да даже если раз в сутки перегенерять, получается довольно рандомно на вид. :)
 
Сверху