Можете ли вы сохранить массив в Memcache?
Я хотел бы хранить;
Вместе, как массив, кто-то сказал мне, что вы могли бы, а потом кто-то сказал мне, что не мог. Что это?
Да.
Memcache::set('someKey', array( 'user_id' => 1, 'url' => 'http://', 'name' => 'Dave' ));
Подробные примеры см. В документации .
Максимальный размер хранилища элемента в memcache составляет 1 048 576 байт (1 МБ), сериализация массива занимает немного места.
если бы вы структурировали массив так же, как:
array( [0] => 1, [1] => 2, [2] => 3 )
ключ автоматически генерируется, а значение является идентификатором пользователя.
сериализованный массив из 5000 пользователей с номером 1-5000 с использованием этой структуры имеет длину строки 67792 символа, 50000 пользователей составляют массив из 777794 символов.
с номером от 100000 до 150000 выдает сериализованную строку из 838917 символов.
поэтому при 50 тыс. пользователей (как указано в предыдущем вопросе), вы, вероятно, будете находиться под лимитом 1 МБ. если у вас есть локальный кеш (APC и т. д.), используйте это вместо этого, или если по какой-либо причине НЕ нужны все идентификаторы сразу, я бы предложил предложить разбить результаты или просто использовать БД.
также подумайте о структуре данных, которую вы храните в memcached. Если вы используете кеш, чтобы предоставить вам список первичных ключей для поиска, нужны ли вам другие данные?
$memcache = new Memcache; $memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); $id = $_REQUEST['name']; $key = md5("SELECT * FROM memc where FirstName='{$id}'"); $get_result = array(); $get_result = $memcache->get($key); if ($get_result) { echo "<pre>\n"; echo "FirstName: " . $get_result['FirstName'] . "\n"; echo "Age: " . $get_result['Age'] . "\n"; echo "</pre>\n"; } else { $query="SELECT * FROM memc where FirstName='{$id}'"; $result = mysql_query($query); $row = mysql_fetch_array($result); echo "<pre>\n"; echo "FirstName: " . $row[1] . "\n"; echo "Age: " . $row[3] . "\n"; echo "Retrieved from the Database\n"; echo "</pre>\n"; $memcache->set($key, $row, MEMCACHE_COMPRESSED, 60); mysql_free_result($result); }
добавьте настройку базы данных изменений в соответствии с требованиями к ur, проверенный код, пожалуйста, попробуйте
Вы можете хранить почти все, что захотите, в memcached.
См. Документацию memcache::set
, в которой говорится:
bool Memcache::set(string $key, mixed $var [, int $flag [, int $expire ]] )
вар
The variable to store. Strings and integers are stored as is, other types
сохраняются сериализованными.
Итак, да, вы можете хранить массив или даже объект, если необходимо 🙂
BTW, это то же самое с Memcache::add
и Memcache::replace