我在做一个需要缓存系统的程序。所以描述是我得到了一个mysql数据库,它有4列,'mac','src',' username ',' main‘,其中mac,src,username是主表中的键/值和外键。它将首先插入到这3个元素中,并将它们的ID放入main中。我得到的主表的数据大约是18m,而这3个表的数据大约是2m。我不想每次需要在main中插入时都使用select,所以我使用一个数组来缓存它们。$hash= ['mac'=>[],'src'=>[],'username'=>[]];并像这样存储'n获取数据:$hash'mac';
当散列数据的goo超过500k时,这种方法的性能很差;那么有没有更好的方法呢?
PS:我得到了与nodeJS相同的东西,我使用了一个名为哈希表的npm模块,性能大约是每4m插入10k。我读过有关php数组的文章,发现它们是哈希表,但现在它做同样的工作要慢得多,因为只需要1k,至少需要5分钟;
发布于 2017-11-08 21:05:56
假设您在Linux服务器上。请参阅:Creating a RAM disk有了RAM盘后,使用mac地址的sha1()
散列将每个ID
缓存为一个文件。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.
PHP磁盘允许你使用中的文件系统包装器,比如file_get_contents()
和file_put_contents()
来读/写。
要考虑的其他更强大的替代方案:
发布于 2018-06-11 01:42:22
你可以使用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://stackoverflow.com/questions/47178955
复制相似问题