0
<< предыдущая заметкаследующая заметка >>
16 августа 2013
Самый старый глюк движка

Много лет читатели мне жаловались, что раздел дневника «содержание» /dnevnik/contents ведет себя странно — кнопка «показать больше» внизу иногда не работает, иногда работает, а иногда показывает и без нее. Поскольку я никогда никакого глюка не наблюдал, то не знал, что ответить. А сегодня решил разобраться. Собственно, первое, что пришло в голову (и подтвердилось) — глюки memcache. Потому что для меня (админа) ничего не кэшируется.

Тем, кто не в курсе, напоминаю, что memcache — это софт для Apache, который помогает использовать оперативку сервера для кратковременного кэширования. Движок умеет работать с memcache, если тот есть, а если не установлен — то работает без него.

Итак, выяснилась забавная вещь.

Система memcache досталась мне в наследство еще от Созидателя. Он придумал гнать все запросы MySQL через единую mysql-функцию, которая справлялась в кэше, есть ли результаты для подобного запроса (разумеется, часть запросов, типа записи, не кэшируются). Так вот: в качестве имени использовалась сама строка запроса «SELECT ...» Она может быть длинной, но я не придавал этому значения, и зря. Потому что оказалось, memcache имеет максимальную длину для имени переменной, после которой ее обрезает. Во время запроса содержания SELECT был очень длинным — там пристыковывались кучи данных из других таблиц, калькулировалась посещаемость и т.п. Так что последний параметр «LIMIT 20" уже попадал под обрезку.

Я теперь изменил работу с memcache — использую вместо строки запроса ее md5(), и глюк пропал.

Так что если вы программируете сайты с использованием memcache — имейте в виду: длина имени переменной имеет недокументированное ограничение, после которого идет обрезка.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий


Include not found: `/home/www/lleo.me/blog/template/_reklamnaya_lirica.htm`