Frage

Können Sie speichern ein Array in Memcache?

Ich möchte speichern;

  1. Eine Benutzer-ID-Nummer
  2. Ein Benutzer Foto-URL
  3. Ein Benutzer Name

Zusammen als ein Array, erzählte mir jemand Sie konnte, und dann jemand sagte mir, man konnte nicht Welche ist es?

War es hilfreich?

Lösung

Ja.

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

Bitte beachten Sie die Dokumentation für sehr detaillierte Beispiele.

Andere Tipps

max Speichergröße eines Elements in memcache 1.048.576 Bytes (1 MB) ist, ein Array Serialisieren dauert ein wenig Platz.

Wenn Sie sind Ihr Array strukturieren so einfach wie:

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

-Taste wird automatisch generiert und Wert ist der Benutzer-ID.

eine serialisierte Array von 5000 Benutzern numerierten 1-5000 diese Struktur verwendet, eine String-Länge von 67792 Zeichen, 50000 Benutzer erzeugt ein Array von 777.794 Zeichen.

Nummerierung 100.000 bis 150.000 erzeugt eine serialisierte Zeichenfolge von 838.917 Zeichen.

so bei 50k Benutzern (wie in der letzten Frage verwiesen), werden Sie wahrscheinlich unter der 1MB Grenze sein. obwohl, wenn Sie einen lokalen Cache (APC, etc ...), verwenden, die stattdessen oder wenn aus irgendeinem Grund auf einmal die IDs nicht brauchen, würde ich die Ergebnisse sehr empfehlen Aufspaltung oder einfach die DB verwenden.

denkt auch über die Datenstruktur, die Sie in Memcached sind zu speichern. Wenn Sie den Cache einfach verwenden, um Ihnen eine Liste der Primärschlüssel zum Nachschlagen, haben Sie die anderen Daten müssen?

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

hinzufügen Einstellungsänderung Datenbank entsprechend ur Anforderung, getestet Code bitte versuchen Sie es

Sie können speichern fast alles, was Sie in Memcached wollen.

Sehen Sie die Dokumentation von memcache::set , die sagt:

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
     

gespeichert werden serialisiert.

Also, ja, können Sie ein Array speichern, oder sogar ein Objekt bei Bedarf: -)


BTW, es ist das gleiche mit Memcache::add und Memcache::replace

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top