我在php中有一个超过1 mb的对象。我正在使用memcache,它允许我存储1MB或数据。有人知道1MB以上数据的其他替代方案吗?我读到过,改变memcache以存储更多内存并不是最好的选择。

最佳答案

可以使用扩展memcache支持高于1MB limit的数据。请注意,在更高和更高的范围内,可以使用i命令行选项配置最大支持的对象大小。

 memcached -I 5m     //default: 1mb, min: 1k, max: 128m

MultipartCache只需根据限制集将数据分成不同的部分memcached 1.4.2
例子:
$largeSet = range(0, 100000);
$key = "largeSet";

$cache = new MultipartCache();
$cache->setLimit(1024);
$cache->set($key, $largeSet);

系统会将数据库拆分到max 1MB的不同位置。
获取这些信息很容易
$dataFromCache = $cache->get($key);

我们如何确定数据是正确的?这就是size/limit的作用,但是让我们做一个随机测试
for($i = 0; $i < 20; $i ++) {
    $rand = mt_rand(0, 100000);
    printf("%s - %s\n", $dataFromCache[$rand], assert($dataFromCache[$rand] == $rand) ? "true" : "false");
}

产量
39603 - true
16034 - true
23116 - true
94038 - true
64481 - true
84987 - true
53912 - true
32153 - true
43965 - true
71144 - true
97309 - true
53227 - true
28525 - true
9936 - true
16921 - true
27323 - true
35129 - true
46235 - true
5641 - true
43425 - true

现在让我们看看更敏感的信息。就像一个图像…
$key = "largeImage";
$cache = new MultipartCache();
$cache->addserver("127.0.0.1");
$cache->set($key, file_get_contents("large_image.jpg"));

header("Content-Type: image/jpeg");
echo $cache->get($key);

10-01 05:36