Eğer Memcache bir PHP dizisi saklayabilirsiniz?

4 Cevap php

Can you store an Array in Memcache?

Ben saklamak istiyorum;

  1. Bir kullanıcı numarası
  2. Bir kullanıcının fotoğraf URL
  3. A kullanıcılar isim

Together as an array, someone told me you could and then someone told me you couldn't Which is it?

4 Cevap

Evet.

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

Çok ayrıntılı örnekler için documentation bakın.

memcache bir öğenin maksimum depolama boyutu bir dizi boşluk biraz sürer serileştirip 1.048.576 Byte (1MB) olduğunu.

: basitçe gibi dizinizi yapısı olsaydı

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

anahtar varlık auto oluşturulan ve değer kullanıcı kimliği olmak.

5000 kullanıcılarının tefrika dizisi 50000 kullanıcıların 777.794 karakterleri bir dizi üretir, 67792 karakter, bir dize uzunluğu olan bu yapıyı kullanarak 1-5000 sayılı.

100.000-150.000 838.917 numaralandırma karakter tefrika dize üretir.

(önceki soruya başvurulan gibi) böylece 50k kullanıcıları, büyük olasılıkla 1MB sınırının altında olacak. Eğer herhangi bir nedenle bir kerede tüm kimlikleri ihtiyacınız yoksa bunun yerine, ya da, ben son derece bölme kadar sonuçları ya da sadece DB kullanarak öneririm rağmen yerel bir önbellek (APC, vs ..), kullanım varsa.

Ayrıca memcached olarak depolamak veri yapısı hakkında düşünüyorum. Size arama size birincil anahtarlar bir listesini vermek sadece önbellek kullanıyorsanız, diğer veriler gerekiyor?

$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);
}

add change database setting according to ur requirement ,tested code please try