0

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

当哈希数据超过 500k 时,这种方法的性能很差;那么有没有更好的方法来做到这一点?

PS:我用 nodeJS 得到了同样的东西,我使用了一个名为 hashtable 的 npm 模块,性能大约每 4m 插入 10k。我读过 php arrays 并发现它们是 Hashtables ,但现在它做同样的工作要慢得多,只需要 1k 至少需要 5 分钟;

4

2 回答 2

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.

澄清一下:file_get_contents() RAM 磁盘允许您在 PHP 中使用文件系统包装器,例如file_put_contents()读取/写入 RAM。


要考虑的其他更强大的替代方案:

于 2017-11-08T13:05:55.607 回答
0

您可以使用 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

于 2018-06-10T17:42:22.027 回答