缓存超过1mb memcache替代品

时间:2013-04-12 17:44:35

标签: php caching

我在php中有一个超过一MB的对象。我正在使用memcache,它允许我存储1mb或数据。有没有人知道超过1mb的数据的任何其他替代品。我已经读过,更改内存缓存来存储更多不是最好的选择。

1 个答案:

答案 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);