Можете ли вы хранить массив PHP в Memcache? - PullRequest
18 голосов
/ 30 июля 2009

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

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

  1. Идентификационный номер пользователя
  2. URL фотографии пользователя
  3. Имя пользователя

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

Ответы [ 4 ]

23 голосов
/ 30 июля 2009

Да.

Memcache::set('someKey', array(
    'user_id' => 1,
    'url' => 'http://',
    'name' => 'Dave'
));

Пожалуйста, смотрите документацию для очень подробных примеров.

8 голосов
/ 30 июля 2009

максимальный размер хранилища элемента в memcache составляет 1 048 576 байт (1 МБ), сериализация массива занимает немного места.

если бы вы структурировали свой массив так же просто, как:

array(
    [0] => 1,
    [1] => 2,
    [2] => 3
)

ключ генерируется автоматически, а значение - идентификатором пользователя.

сериализованный массив из 5000 пользователей с номерами 1-5000, использующий эту структуру, имеет длину строки 67792 символа, 50000 пользователей создает массив из 777794 символов.

с номерами от 100000 до 150000 создает сериализованную строку из 838917 символов.

так что при 50k пользователей (как указано в предыдущем вопросе) вы, вероятно, будете ниже лимита в 1 МБ. если у вас есть локальный кеш (APC и т. д.), используйте его вместо этого, или если по какой-либо причине НЕ нужны все идентификаторы одновременно, я настоятельно рекомендую разделить результаты или просто использовать БД. *

также подумайте о структуре данных, которую вы храните в memcached. Если вы используете кеш просто для того, чтобы предоставить вам список первичных ключей для поиска, нужны ли вам другие данные?

2 голосов
/ 22 ноября 2011
<code>$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 "
\ п "; } еще { $ query = "SELECT * FROM memc, где FirstName = '{$ id}'"; $ result = mysql_query ($ query); $ row = mysql_fetch_array ($ result); echo "
\n";
    echo "FirstName: " . $row[1] . "\n";
    echo "Age: " . $row[3] . "\n";
    echo "Retrieved from the Database\n";
    echo "
\ n"; $ memcache-> set ($ key, $ row, MEMCACHE_COMPRESSED, 60); mysql_free_result ($ результат); }

добавить изменение базы данных в соответствии с требованиями, протестированный код, пожалуйста, попробуйте

1 голос
/ 30 июля 2009

Вы можете хранить почти все, что вы хотите в 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

хранятся в сериализованном виде.

Итак, да, вы можете хранить массив или даже объект, если это необходимо: -)


Кстати, то же самое с Memcache::add и Memcache::replace

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...