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

StackOverflow https://stackoverflow.com/questions/1203435

  •  05-07-2019
  •  | 
  •  

Вопрос

Можете ли вы сохранить Массив в 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); }

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

Вы можете хранить в memcached практически все, что захотите.

Смотрите документацию по memcache::set, в котором говорится :

bool Memcache::set(string $key, mixed $var [, int $flag [, int $expire ]] )

var

The variable to store. Strings and integers are stored as is, other types

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

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


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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top