Кеш Yii в MySQL
- Антон Смирнов
- Сообщения: 284
- Зарегистрирован: 2011.07.08, 10:37
- Контактная информация:
Кеш Yii в MySQL
Коллеги, столкнулся вот с чем.
В БД (MySQL) хранится кеш. Всего элементов в таблице не более 10 000. Кеш обновляется редко, в основном, рассчитан на длительное хранение.
Все было хорошо долгое время, пока не получил ошибку:
Не удалось выполнить CDbCommand::execute(): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0d4b0f6e114dd2cda162a64e74757b22' for key 'PRIMARY'. Выполнявшийся SQL-запрос: INSERT INTO cache_1 (id,expire,value) VALUES ('0d4b0f6e114dd2cda162a64e74757b22',1355213827,:value).
Правильно ли я понимаю, что механизм случайных ключ подлежит переработке?
В БД (MySQL) хранится кеш. Всего элементов в таблице не более 10 000. Кеш обновляется редко, в основном, рассчитан на длительное хранение.
Все было хорошо долгое время, пока не получил ошибку:
Не удалось выполнить CDbCommand::execute(): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0d4b0f6e114dd2cda162a64e74757b22' for key 'PRIMARY'. Выполнявшийся SQL-запрос: INSERT INTO cache_1 (id,expire,value) VALUES ('0d4b0f6e114dd2cda162a64e74757b22',1355213827,:value).
Правильно ли я понимаю, что механизм случайных ключ подлежит переработке?
- Антон Смирнов
- Сообщения: 284
- Зарегистрирован: 2011.07.08, 10:37
- Контактная информация:
Re: Кеш Yii в MySQL
Никогда не думал, что так произойдетSam Dark писал(а):Коллизии возможны, да.
Может увеличить длину ключа?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Кеш Yii в MySQL
Там md5, можно попробовать перекрыть метод generateUniqueKey. Хотя…
Нравится Yii? Давайте сделаем его лучше!.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Кеш Yii в MySQL
Такого вроде не должно быть. По идее, должен быть не INSERT, а UPDATE.
Нравится Yii? Давайте сделаем его лучше!.
- Антон Смирнов
- Сообщения: 284
- Зарегистрирован: 2011.07.08, 10:37
- Контактная информация:
Re: Кеш Yii в MySQL
В CDbCache нет "Update", только "Insert". Глюк?Sam Dark писал(а):Такого вроде не должно быть. По идее, должен быть не INSERT, а UPDATE.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Кеш Yii в MySQL
Я в том смысле, что:
То есть, по идее, это всё-таки коллизия.
Код: Выделить всё
protected function setValue($key,$value,$expire)
{
$this->deleteValue($key);
return $this->addValue($key,$value,$expire);
}
Нравится Yii? Давайте сделаем его лучше!.
- Антон Смирнов
- Сообщения: 284
- Зарегистрирован: 2011.07.08, 10:37
- Контактная информация:
Re: Кеш Yii в MySQL
Сегодня опять возникли коллизии, при этом кеш обновляется не часто. Мне кажется проблема не в md5, а в самой длине ключа.
Re: Кеш Yii в MySQL
Какая разница какая длина у ключа, если
по идее должен избавить от коллизий.
Как вариант, могу предположить что 2 процесса одновременно выполняют это действие. Попробуйте заключить в транзакцию.
Код: Выделить всё
$this->deleteValue($key);
return $this->addValue($key,$value,$expire);
Как вариант, могу предположить что 2 процесса одновременно выполняют это действие. Попробуйте заключить в транзакцию.
- Антон Смирнов
- Сообщения: 284
- Зарегистрирован: 2011.07.08, 10:37
- Контактная информация:
Re: Кеш Yii в MySQL
Имелся ввиду уход от md5.Hett писал(а):Какая разница какая длина у ключа, если
по идее должен избавить от коллизий.Код: Выделить всё
$this->deleteValue($key); return $this->addValue($key,$value,$expire);
Как вариант, могу предположить что 2 процесса одновременно выполняют это действие. Попробуйте заключить в транзакцию.
Как вариант, могу предположить что 2 процесса одновременно выполняют это действие
Видимо это причина проблемы, спасибо.