Можете ли вы сохранить массив в Memcache?
Я хотел бы сохранить;
- Идентификационный номер пользователя
- URL-адрес пользователя
- Имя пользователя
Вместе как массив, кто-то сказал мне, что можешь, а потом кто-то сказал мне, что ты не можешь Что это?
Можете ли вы сохранить массив в 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