Кэширование запросов

Статус
В этой теме нельзя размещать новые ответы.

Активист

Активист
Команда форума
Не надо кешировать SQL запросы. Уж точно не так и не в этом случае.
 

Вурдалак

Продвинутый новичок
«Если приложение тормозит — включи кеш. Если глючит — отключи кеш.» (c) Кто-то в Интернете.
 
  • Like
Реакции: BRat

riki-tik

Новичок
Хранить результаты кеша нужно в каком либо хранилище: либо это тупо файловая система, либо это Memcached или Redis сервер.
Если говорить сущностями и абстракциями у тебя должна быть сущность Cache и методы set, get, hasKey, delete, flush или что-то вроде того
Подсистема кеширования как таковая лежит на уровень ниже и при инициализации сущности Cache можно указывать какое именно хранилище тебе нужно.

Как-то так:

PHP:
<?php
Cache::init('filesystem');

$sql = "SELECT * FROM users";

if (!Cache::hasKey(md5($sql))) {
    $data = DB::query($sql)->fetchAssoc();
    Cache::set(md5($sql), $data, 600)); // последний параметр это ttl - время жизни кеша
} else {
    $data = Cache::get(md5($sql));
}

var_dump($data);
По-моему прекрасная реализация! Благодарю за помощь!
Я же писал что я хочу включать кэширование лишь для определенных запросов. Т.е. фактически я хочу иметь возможность кэшировать любого запроса, но по-умолчанию кэширование выключено.
 

Breeze

goshogun
Команда форума
Партнер клуба
По-моему прекрасная реализация! Благодарю за помощь!
Я же писал что я хочу включать кэширование лишь для определенных запросов. Т.е. фактически я хочу иметь возможность кэшировать любого запроса, но по-умолчанию кэширование выключено.
чем она прекрасная для тебя, если ты это впервые видишь?
вообще, почему тебе понадобилось какое-то там кеширование? стильно, модно, молодежно или есть объективные показания?
 

riki-tik

Новичок
чем она прекрасная для тебя, если ты это впервые видишь?
вообще, почему тебе понадобилось какое-то там кеширование? стильно, модно, молодежно или есть объективные показания?
Просто удобное решение. Кэширование данных я реализовал уже, но запросы кэшировал пока только с помощью переменных и только в текущей запросе, даже не думал о том чтобы хранить в файлах.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Чего-то я не понял, автор какие данные ты кешировал и как это так:
но запросы кэшировал пока только с помощью переменных и только в текущей запросе
 

CoolKid

Новичок
По-моему прекрасная реализация! Благодарю за помощь!.
Обращайся, здесь только несколько человек могут оказать реальную помощь конкретным советом, остальные будут разглагольствовать в духе "тебе это не нужно, ты говнокодер, это вообще делается не так" итд
 

С.

Продвинутый новичок
Чего-то я не понял, автор какие данные ты кешировал и как это так:
но запросы кэшировал пока только с помощью переменных и только в текущей запросе
А когда он про кэш в глобалс говорил, тебя это ни на какие мысли не натолкнуло? Да, такой нано-кэш только на время работы одного HTTP запроса.
 

hell0w0rd

Продвинутый новичок
А может хоть кто-то объяснить, нафига брать md5 (или другую хеш-функцию) от строки, чтобы сделать ее ключем масива, пусть для кеша, пусть не для кеша?
 

CoolKid

Новичок
А может хоть кто-то объяснить, нафига брать md5 (или другую хеш-функцию) от строки, чтобы сделать ее ключем масива, пусть для кеша, пусть не для кеша?
1. Фиксированная длина (как уже выше сказали)
2. Возможность не переживать за длину ключа, пробелы, недопустимые символы итд
3. Возможность использовать полученный хеш как имя файла, папки, ключа в базе
 

Вурдалак

Продвинутый новичок
Брать хеш для ключа, в каком это изначально виде было, смысла не имеет никакого. Фиксированная или не фиксированная — это вообще насрать, там внутри массива тоже хеш берётся.
 

CoolKid

Новичок
это тебе так кажется. выиграл битву, но не войну
А в этой "войне" невозможно победить, можно только не проиграть :)

Когда текущего решения ему станет мало, когда он задумается о переходе на ORM или что-то подобное, короче когда он созреет и достигнет нужного уровня - вот тогда ваши советы будут полезны.

А пока вы даете ответы на ещё не существующие вопросы. Очень сложно представить и понять то, что ты еще не щупал, не пропустил через себя, не споткнулся на этом.
 

fixxxer

К.О.
Партнер клуба
С такой схемой он через пару дней столкнется с проблемой инвалидации кэша.

Вообще hash(query) - это худшее, что можно придумать, и с точки зрения управляемости кэшом, и с точки зрения ответственностей. Как быстрый хак сойдет но не более.
 

CoolKid

Новичок
Вот сколько уже было сказано о том, что это неправильно, так не делают, инвалидация, и прочие умные слова.
Но правильное и конкретное решение почему-то так никто и не изложил, ни в виде кода, ни в виде ссылки на статью или библиотеку
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху