Механизм кэширования PHP

Я работал над программой, которая нуждается в системе кеширования. поэтому описание - я получил базу данных mysql, которая имеет 4 столбца: "mac", "src", "username", "main". Какие mac, src, username являются ключом / значениями и внешним ключом в основной таблице. он сначала вставит эти 3 и поместит их ID в main. Данные, которые я получил, составляют около 18 м для основной таблицы, а для этих 3 - около 2 м каждая. Я не хочу использовать select каждый раз, когда его нужно вставить в main, поэтому я использовал массив для их кеширования. $hash= ['mac'=>[],'src'=>[],'username'=>[]]; и сохраняйте данные для n, например: $hash['mac']['54:52:00:27:e4:91'];

Этот подход получил плохую производительность, когда хеш-данные превышают 500 Кб; Так есть ли лучший способ сделать это?

PS: я получил то же самое с nodeJS, который использовал модуль npm с именем hashtable, а производительность составляла около 10 тыс. Вставок каждые 4 метра. Я читал о php-массивах и обнаружил, что они являются Hashtables, но теперь он выполняет ту же работу с гораздо меньшим путём, всего за 1 КБ это занимает как минимум 5 минут;

2 ответа

Предполагая, что вы находитесь на сервере Linux. См.: Создание RAM-диска. Когда у вас есть RAM-диск, кешируйте каждый ID как файл, используя sha1() хеш MAC-адреса. Файл RAM-диска - это, ну, RAM; постоянный кеш в памяти.

<?php
$mac   = '54:52:00:27:e4:91';
$cache = '/path/to/ramdisk/'.sha1($mac);

if (is_file($cache)) { // Cached already?
    $ID = file_get_contents($cache); // From the cache.
} else {
    // Run SQL query here and get the $ID.

    // Now cache the $ID.
    file_put_contents($cache, $ID); // Cache it.
}
// Now do your insert here.

Для пояснения: диск RAM позволяет вам использовать обертки файловой системы в PHP, такие как file_get_contents() а также file_put_contents() для чтения / записи в ОЗУ.


Другие более надежные альтернативы для рассмотрения:

Вы можете использовать PHP Super Cache, который очень прост и работает быстрее, чем Reddis, Memcache и т. Д.

require __DIR__.'/vendor/autoload.php';

use SuperCache\SuperCache as sCache;

//Saving cache value with a key
// sCache::cache('<key>')->set('<value>');
sCache::cache('myKey')->set('Key_value');

//Retrieving cache value with a key
echo sCache::cache('myKey')->get();

https://packagist.org/packages/smart-php/super-cache

Другие вопросы по тегам