Кэширование SQL-запросов и получение данных - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь настроить кэширование поиска по почтовому индексу, который добавляет полученный поиск в текстовый файл, используя следующую команду:

file_put_contents($cache_file, $postcode."\t".$result."\n", FILE_APPEND);

Я хотел бы иметь возможность проверить этот файл перед запускомзапрос, который я сделал с помощью этого:

if( strpos(file_get_contents($cache_file),$postcode) !== false) {
  // Run function
}

Что я хотел бы сделать, это найти $ почтовый индекс в текстовом файле (как выше) и вернуть данные на одну вкладку над ($результат).

Во-первых, возможно ли это?

Во-вторых, это даже хороший способ кэширования поисков SQL?

1 Ответ

0 голосов
/ 21 октября 2018

1) да, это возможно - самый простой способ - сохранить данные поиска в array и записать / прочитать их из файла с serialze / unserialze

$lookup_codes = array(
    '10101' => 'data postcode 1 ...',
    '10102' => 'data postcode 2 ...',
    // ...
);

file_put_contents($cache_file, serialize($lookup_codes));
$lookup_codes = unserialize(file_get_contents($cache_file));

$postcode = '10101';
if(array_key_exists($postcode, $lookup_codes)){
 // ... is available
}

2)гораздо более интересный вопрос. на самом деле зависит от ваших данных, структуры, количества и т. Д.

По моему мнению, кэширование добавляет сложности вашему приложению, и, если возможно, избегайте его: -)

Вы можете попытаться:

  • Оптимизировать ваш запрос SQL или структуру базы данных, чтобы ускорить его для запроса данных почтового индекса.Обычно базы данных довольно быстрые - и поэтому созданы для таких сценариев использования

    Я не уверен, какую БД вы используете, но для MySQL посмотрите Выбор оптимизации .Или в качестве другого ключевого слова вы можете найти INDEX, который довольно сильно увеличивает запросы

  • file_get_contents действительно быстро, но когда вы меняете файл часто, возможно, нужно искать другие способы кэшированиякак Memcached для хранения в памяти

...