2012-11-26 5 views
6

Ich werde versuchen, einfach zu sein, also was ich brauche, führen Sie eine MySQL-Abfrage (Auswahl von Datensätzen aus einer Tabelle) sagen wir krank die Abfrage mit Cron Jobs oder was auch immer alle 5 Minuten, und speichern Sie diese Abfrage oder Ergebnisse in eine Datei oder eine globale Variable, wenn es möglich ist, und dann an alle Clients (dh mit der gleichen Abfrage an alle Benutzer, ohne die Verbindung zu dieser Datenbank wiederherzustellen.) Jetzt weiß ich, dass einige von Ihnen mir sagen, dass ich Cache verwenden soll, aber ich habe danach gesucht, und wenn sich die Tabelle ändert, wird es neuen Cache geben, und meine Tabelle ändert sich ständig, jetzt ist es mir egal, ob sich die Tabelle geändert hat Ich möchte nur die gleiche Abfrage an alle Clients liefern. Ist das möglich? Ihre Empfehlungen bitte. Danke.Verwenden Sie die gleiche MySQL-Abfrage mit allen Benutzern, ohne die Verbindung zur Datenbank wiederherzustellen

Der Cache läuft automatisch ab, wenn die Tabelle geändert wird (Einfügen, Aktualisieren, Löschen usw.). Und meine Tabelle ändert sich ständig, also ist es möglich, einen Cache zu speichern, selbst wenn die Tabelle geändert wurde? Oder sollte ich nach einer anderen Lösung suchen?

+0

Haben Sie Caching-Lösungen untersucht? – hd1

+0

wiederholende identische Abfragen ist nicht ungewöhnlich - haben Sie spezifische Probleme? mysql macht standardmäßig Caching. –

+0

Ja, ich erwähnte das bereits in meiner Frage, aber wie gesagt, meine Tabelle ändert sich ständig und der Cache wird gelöscht, wenn die Tabelle aktualisiert wurde. – user1852196

Antwort

1

zu verwenden Wenn die Ergebnismenge nicht zu groß ist, können Sie es in einen Cache generierte Skript wie folgt:

file_put_contents(
    'mycache.php', 
    '<?php return ' . var_export($results, true) . ' ?>' 
); 

Dann, es zu benutzen:

$results = include 'mycache.php'; 
+0

vielen Dank. Ihre Methode gab genau das, was ich brauche. – user1852196

0

Wenn Sie immer gleiche Art und Weise mit (Funktion, Klasse) Datenbank auszuführen lesen und schreiben,
Sie immer nach jeder Aktion

zum Beispiel eines Cache expireation setzen:

function add() // update, delete 
{ 
    if (added) $this->expire_cache(); 
} 

function search() 
{ 
    if (results) $this->set_cache(results); 
} 

function expire_cache() 
{ 
    // do expire or purge cache 
} 

function set_cache($db_results) 
{ 
    // saving the database result OR computed result into cache 
    // memcache, redis, disk cache or anything 
} 

jedoch der Zweck des Cachespeichers ist, die Anfrage zu bedienen, ohne teure Ressource wie Datenbankabfrage zu bekommen,
, aber wenn Sie sehr häufig aktualisieren müssen, dann ist die Cache-Implementierung nicht so nützlich

memcache Beispiel: http://php.net/manual/en/book.memcache.php

Sie memcache Modul zu kompilieren benötigen würde, Setup & einen memcache Server starten, um memcache

+0

Ja, weil meine Tabelle sehr häufig aktualisiert wird:/so kann ich MySQL Cache nicht verwenden. Und das Problem ist, Sie können Memcache nur auf erkannten Servern installieren. – user1852196

Verwandte Themen