instantsoft / icms2

Self-hosted Site Management System
https://instantcms.ru
GNU General Public License v2.0
295 stars 120 forks source link

cache Schema #1205

Closed ValenokPC closed 4 years ago

ValenokPC commented 4 years ago

У вас сделано что оно сохраняется в переменную и после этого при частых инсертах оно так и лежит в переменной памяти php. Я не вижу смысла держать их постоянно в памяти. А можно просто поместить в кеш и при необходимости их загружать

Зачем в $cache->set указываете ttl?

А зачем нам его очищать так часто! Таблицы в продакшене статичны и очень радко изменяются! У вас нельзя сделать постоянное кэширование только на время!

fuzegit commented 4 years ago

А можно просто поместить в кеш и при необходимости их загружать

Еще раз: выборка из кэша и именно такая выборка полей таблиц равнозначна как минимум, а скорее всего будет быстрее, чем из кэша, поскольку данные по структуре таблиц mysql держит в памяти и не выполняет дисковых операций.

Я не вижу смысла держать их постоянно в памяти.

Я вижу.

А зачем нам его очищать так часто! Таблицы в продакшене статичны и очень радко изменяются! У вас нельзя сделать постоянное кэширование только на время!

Вопрос не в том, как часто очищать, а в том, что мы никак не повлияем на ttl в данном случае. В то время как весь остальной кэш подчиняется опции ttl в админке. Весь кэш очищается автоматически, при изменении данных в таблицах. Проставлять ttl таким образом, да и в целом кэшировать этот запрос, неочевидно для тех, кто будет пытаться понять, почему поле в таблице добавили (хоть в phpmyadmin, хоть средствами CMS, например при установке пакета дополнения), а движок его не видит. Но даже если допустить, что кэш оправдан, то необходимо в методы, где производятся манипуляции с ячейками (ALTER TABLE *) добавлять очистку этого кэша по ключу.