2016-07-25 22 views
0

Ich verwende Memcached, um den globalen Status einer PHP-Website zu speichern. Auf die gespeicherten Daten muss durch Anfragen von jedem angemeldeten Benutzer zugegriffen werden.Gibt es eine Möglichkeit, die Objektpermanenz in memcached zu garantieren?

Ich bin mir bewusst, dass wenn Memcached voll wird es nur die ältesten Objekte ausgibt. Gibt es eine Fallback-Technik, die in diesem Fall verwendet werden kann?

Alternativ ignorieren Sie memcached. Was ist eine schnellere Möglichkeit, den globalen Zustand in PHP zu speichern, ohne auf MySQL zurückgreifen zu müssen?

+0

Neugierig, was Ihre Abneigung gegen MySQL ist? – bnxio

+0

Ich versuche nur, die Dinge zu beschleunigen. Alles, was ich speichere, ist ein Tupel {'userid', 'state1', 'state2', 'state3} pro Benutzer, sortiert in 9 Arrays. –

Antwort

0

Sie können als JSON in der Sitzung speichern. Sie können Redis (statt memcached) auch mit PHP verwenden und die maximale Speicherbelegung einstellen.

+0

Redis scheint eine gute Option, danke. Sind Sitzungen nicht pro Benutzer, d. H. Nicht global? –

+0

Ja, Sitzungen sind pro Benutzer. Für globale Sachen verwenden Sie Redis. – Eric

0

Ihre Frage ist wie zu fragen, wie man etwas für eine lange Zeit im Gedächtnis behält.

Memcache löschen Sie das alte Element, wenn es voll ist, und fügen Sie ein weiteres Element hinzu. Ihre Anwendung sollte so funktionieren, dass die Prozedur zum Eintragen einiger Elemente in den Cache aktiviert wird, wenn der Cache null zurückgibt oder aus irgendeinem Grund deaktiviert ist. soemthing wie folgt aus: 1- gelesen das Element aus Cache 2- wenn das Element nicht null ist 3- das Einzelteil 4- das Element aus Datenbank (oder einer anderen Quelle) zu lesen 5- die Item-in-Cache gesetzt 6-return the Item

Cache ist kein permanenter Speicher und Ihre Anwendung sollte so konzipiert sein, dass sie auch ohne Geld funktioniert.

Da es jedoch der Anwendungsstatus ist, ist der Aufruf dieses Elements wahrscheinlich so hoch, dass das Ende der Warteschlange nicht erreicht wird. Dies ist zwar kein guter Ansatz, aber Sie können auch einen Dienst erstellen, um das Objekt aus dem Cache zu holen, damit es nicht bis zum Ende der Warteschlange geht.