mysql — механизм кэширования 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 минут;

0

Решение

Предполагая, что вы находитесь на сервере 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() для чтения / записи в ОЗУ.


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

1

Другие решения

Вы можете использовать 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

1

По вопросам рекламы [email protected]