|
|
marc77

: 22.05.2007 : 479
|
| : 19.08.2010, 12:30 : Memcache für ein Forum |
|
|
hallo,
memcache ist auf meinem server installiert. Ich hab jetzt schon soviele tutorials gelesen aber wirklich umsetzen kann ich es leider nicht.
Sobald ich das einmal richtig verstanden habe...in einem konkreten fall in meinem code...komm ich denke ich zurecht.
Brauch ich z.b. eine memcache klasse?
wieviele MB sollte ich für memcache bereitstellen?
wie schreibe ich eine bestehende sql abfrage so um, dass sie dann gecacht wird?!
danke |
|
| Nach oben |
|
 |
tmyp

: 07.08.2010 : 487
|
| : 19.08.2010, 14:12 : Memcache für ein Forum |
|
|
Je nachdem, was Du mit memcache-Klasse meinst brauchst Du eine, oder auch nicht. Du brauchst einen Client für memcache.
Wieviel MB Du memcache geben solltest hängt davon ab, wie groß ein durchschnittliches gecachtes Objekt sein soll und wieviele Du davon haben willst.
Das SQL schreibst Du gar nicht um, Du prüfst, ob es ein gecachtes Ergebnis gibt, bevor Du das SQL ausführst.
Wenn es keins gab, läuft das SQL und anschließend packst Du das Ergebnis in den Cache.
Die Einführung auf Wikipedia finde ich recht gut verständlich. |
|
| Nach oben |
|
 |
marc77

: 22.05.2007 : 479
|
| : 20.08.2010, 09:53 : Memcache für ein Forum |
|
|
hast du vielleicht auch eine statistik?
es gibt ja dieses php statistik script für memcache, leider ist aber die seite offline |
|
| Nach oben |
|
 |
tmyp

: 07.08.2010 : 487
|
| : 20.08.2010, 10:22 : Memcache für ein Forum |
|
|
| Was für eine Statistik meinst Du? |
|
| Nach oben |
|
 |
marc77

: 22.05.2007 : 479
|
| : 20.08.2010, 12:47 : Memcache für ein Forum |
|
|
ich wollte das von harun yari...
ist leider nur noch im cache, da die seite offline ist..was vergleichbares hab ich nicht gefunden...
http://webcache.googleusercontent.com/search?q=cache:-E9tARlSNfMJ:livebookmark.net/memcachephp/+memcachephp&cd=3&hl=de&ct=clnk&gl=de
Frage zu SQL mit memcache:
vorher:
| Code: |
$sql = "SELECT c.cat_id, c.cat_title, c.cat_order
FROM " . CATEGORIES_TABLE . " c
ORDER BY c.cat_order";
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}
$category_rows = array();
while ($row = $db->sql_fetchrow($result))
{
$category_rows[] = $row;
// Kategorie Titel
if ( $row['cat_id'] == $viewcat ) { $this_cat_title = $row['cat_title']; }
// Kategorie Titel
}
$db->sql_freeresult($result); |
nachher:
| Code: |
$kategorienholen = $memcache->get("kategorien");
if (!$kategorienholen)
{
$sql = "SELECT c.cat_id, c.cat_title, c.cat_order
FROM " . CATEGORIES_TABLE . " c
ORDER BY c.cat_order";
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}
$category_rows = array();
while ($row = $db->sql_fetchrow($result))
{
$category_rows[] = $row;
// Kategorie Titel
if ( $row['cat_id'] == $viewcat ) { $this_cat_title = $row['cat_title']; }
// Kategorie Titel
}
$db->sql_freeresult($result);
$memcache->set("kategorien",$kategorienholen,0,120);
} |
leider gehts nicht...wo ist hier mein fehler? danke |
|
| Nach oben |
|
 |
seonewbie

: 21.10.2006 : 1759
|
|
| Nach oben |
|
 |
marc77

: 22.05.2007 : 479
|
| : 20.08.2010, 15:05 : Memcache für ein Forum |
|
|
| richtig, man kann nicht alles wissen. wenn du es machen magst, nenn mir deinen Stundenlohn oder sag mir jemand der es macht und davon ahnung hat. |
|
| Nach oben |
|
 |
TonyBologni

: 26.02.2010 : 16
|
| : 31.08.2010, 15:24 : Memcache für ein Forum |
|
|
@marc77:
Lass Dich nicht verunsichern!
Memcache macht natürlich auch für ein einzelnes Forum etc. Sinn. Für jede Website, bei der die Performance optimiert werden soll und man "teure" Funktionen (wie DB Abfragen) hat, die sich wiederholen. Wenn fast nur unterschiedliche Abfragen erzeugt werden, dann wird man kaum Cache Treffer haben. Ich habe jahrelang ein von mir selbst programmiertes Forum betreut und dort war das Caching sehr effektiv bei den als Baum dargestellten Postings jedes Threads und der Übersicht der Threads (Themen).
Der Fehler in Deinem "nachher" Code ist, dass $kategorienholen nie mit den Daten aus der DB befüllt werden!
Anstatt
$memcache->set("kategorien",$kategorienholen,0,120);
sollte sowas stehen:
$memcache->set("kategorien",$category_rows,0,120);
Andere Fehler konnte ich auf den ersten Blick nicht sehen, aber wenn Du nie was in den Cache reinsteckst, bekommst Du auch nichts raus.
Du solltest eventuell noch die Compression verwenden (3. Parameter, 0 in Deinem Beispiel), wenn die zlib Erweiterung installiert ist oder installiert werden kann (einfach ausprobieren).
Ansonsten: Mein Stundensatz ist 53,- Euro -> anton@stoeckl.de
Gruß, Tony
Persönliche Kunstwerke vom Foto auf Poster oder Leinwand: www.pixeltalents.com |
|
| Nach oben |
|
 |