Intereting Posts

Можете ли вы хранить массив PHP в Memcache?

Можете ли вы сохранить массив в Memcache?

Я хотел бы хранить;

  1. Идентификатор пользователя
  2. URL-адрес пользователя
  3. Имя пользователя

Вместе, как массив, кто-то сказал мне, что вы могли бы, а потом кто-то сказал мне, что не мог. Что это?

Да.

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