Подтвердить что ты не робот

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

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

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

  • Идентификационный номер пользователя
  • URL-адрес пользователя
  • Имя пользователя

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

4b9b3361

Ответ 1

Да.

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

Подробные примеры см. в документации.

Ответ 2

Максимальный размер хранилища элемента в 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. Если вы используете кеш просто, чтобы предоставить вам список первичных ключей для поиска, нужны ли вам другие данные?

Ответ 3

$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, проверенный код, пожалуйста, попробуйте

Ответ 4

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