我正在开发一个需要缓存系统的程序。 所以描述是我有一个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分钟;答案 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();