PHP缓存机制

时间:2017-11-08 11:49:09

标签: php mysql caching hashtable apcu

我正在开发一个需要缓存系统的程序。 所以描述是我有一个mysql数据库有4列,'mac','src','用户名','main'哪个mac,src,用户名是键/值和主表中的外键。它将首先插入到那些3并将其ID放入main。 我得到的数据大约是主表的18米,而那些3大约是2米。 我不想每次在main中插入时都使用select,所以我使用了一个数组来缓存它们。         $ hash = ['mac'=> [],'src'=> [],'username'=> []]; 并存储'n获取这样的数据:$ hash ['mac'] ['54:52:00:27:e4:91'];

当散列数据超过500k时,这种方法性能不佳; 那么还有更好的方法吗?

PS:我和nodeJS有同样的事情,我使用名为hashtable的npm模块,而Performance每个4m插入大约10k。我已经阅读了关于php数组并发现它们是Hashtables,但是现在它做了相同的工作,只需要1k就需要至少5分钟;

2 个答案:

答案 0 :(得分:1)

假设您使用的是Linux服务器。见:Creating a RAM disk。获得RAM磁盘后,使用mac地址的ID哈希将每个sha1()缓存为文件。 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())来读取/写入RAM。

其他更有力的替代方案:

答案 1 :(得分:1)

你可以使用非常简单的PHP超级缓存,它比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