У меня есть объект в php, который больше, чем один мб. Я использую memcache, который позволяет мне хранить 1mb или данные. Кто-нибудь знает какие-либо другие альтернативы для данных по 1mb. Я читал, что изменение memcache для хранения больше не лучший вариант.
Вы можете использовать MultipartCache, который расширяет memcache
для поддержки данных, превышающих 1 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);