我在php中有一个超过一MB的对象。我正在使用memcache,它允许我存储1mb或数据。有没有人知道超过1mb的数据的任何其他替代品。我已经读过,更改内存缓存来存储更多不是最好的选择。
答案 0 :(得分:5)
您可以使用扩展memcache
的{{3}}来支持高于1MB limit
的数据。请注意,在memcached 1.4.2
及更高版本中,您可以使用-I命令行选项配置支持的最大对象大小。
memcached -I 5m //default: 1mb, min: 1k, max: 128m
MultipartCache只需根据限制集max 1MB
示例:
$largeSet = range(0, 100000);
$key = "largeSet";
$cache = new MultipartCache();
$cache->setLimit(1024);
$cache->set($key, $largeSet);
系统会在size/limit
上拆分数据库,该数据基于上面示例的575
个不同的位置。
获取此信息非常简单
$dataFromCache = $cache->get($key);
我们如何确定数据是否合适?这就是hash
的用途,但让我们做一个随机测试
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);