До недавнего времени использовал я на сайте файловое кеширование. Все было ОК, но меня перестала устраивать производительность. Поставил на сервер Xcache последней версии 3.2 и через некоторое время начал замечать странности, которые проявляются не постоянно: 1. После редактирования топика, если производилось изменения тегов, отображаются старые теги. При чем, если смотреть, например, на главной, — показываются старые теги. Переходишь в блог — там уже новые.
2. Если проголосовать за топик, а потом его отредактировать, то рейтинг у него становится равен 0. В таблице в поле topic_rating = 0, а topic_count_vote = 1. В таблице topic_vote мой голос тоже отображается. При попытке проголосовать за топик еще раз выдается ошибка, что я уже голосовал ранее.
3. При повтором входе на страницу с топиком после его редактирования и/или оставления комментария к нему, вываливается ошибка MySQL следующего вида:
SQL Error: Duplicate entry '370-2' for key 'topic_id_user_id' at /common/classes/modules/topic/mapper/Topic.mapper.class.php line 937
---
Array
(
[code] => 1062
[message] => Duplicate entry '370-2' for key 'topic_id_user_id'
[query] =>
INSERT INTO cs_topic_read
(
comment_count_last,
comment_id_last,
date_read,
topic_id,
user_id
)
VALUES (
'0' ,
'0' ,
'2016-12-06 18:25:42' ,
'370' ,
'2'
)
[context] => /common/classes/modules/topic/mapper/Topic.mapper.class.php line 937
После обновления страницы раз 5 ошибка пропадает и все отображается корректно.
Измененный конфиг о кеше на данный момент:
$config['smarty']['compile_check'] = true; // Проверять или нет файлы шаблона на изменения перед компиляцией, false может значительно увеличить быстродействие, но потребует ручного удаления кеша при изменения шаблона
$config['smarty']['force_compile'] = false; // Принудительно компилировать шаблоны (отменяет действие 'compile_check')
$config['smarty']['merge_compiled_includes']= false; // Слияние скомпилированных шаблонов (увеличивает скорость рендеринга при большом числе подшаблонов)
$config['smarty']['cache_lifetime'] = false; // Кеширование отрендеренных шаблонов
$config['sys']['cache']['type'] = 'xcache'; // тип кеширования по умолчанию
$config['sys']['cache']['dir'] = '___path.tmp.dir___/cache/'; // каталог для файлового кеша
$config['sys']['cache']['prefix'] = 'websitexxx'; // префикс кеширования, чтоб можно было на одной машине держать несколько сайтов с общим кешевым хранилищем
$config['sys']['cache']['directory_level'] = 1; // уровень вложенности директорий файлового кеша
При работе движка с кешем типа «файл» проблем подобных нет, но хотелось бы ради производительности кешировать все в памяти. Сталкивался ли кто-либо с чем-то подобным?
4 комментария