[Mini-Release]Cache Klasse

09/01/2012 18:28 NotEnoughForYou#1
Hey,

da mich im Urlaub die Langeweile überkommen hat, habe ich mich entschlossen meine Cache Klasse die ich für sogut wie alle meiner datenbankbasierenden Scripte nutze.

PHP Code:
<?php
// Snippet by NE4Y

class Cache {
    
// static variables for the file and the lifetime
    
private static $datei;
    private static 
$zeit;
    private static 
$inhalt;
    private static 
$handle;
    private static 
$dir "cache";
    
    public static function 
cacheAvaible($datei$zeit) {
        
self::$datei $datei;
        
self::$zeit $zeit;
        
        
// checks if the cache exists and the time is not over
        
if(file_exists(self::$dir."/".self::$datei.".txt")) {
           if(
filemtime(self::$dir."/".self::$datei.".txt") > (time() - self::$zeit)) {
               return 
true;
           }
           else {
               return 
false;
           }
       }
       else {
           return 
false;
       }        
    }
    
    public static function 
cacheIt($datei$inhalt) {
          
self::$datei $datei;
          
self::$inhalt $inhalt;
          
          if(
self::$handle fopen(self::$dir."/".self::$datei.".txt""w")) {
              if(
fwrite(self::$handleself::$inhalt)) {
                  
fclose(self::$handle);
                  return 
true;
              }
              else {
                  return 
false;
              }
          }
           else {
               return 
false;
           }
    }
    
    public static function 
getCreateTime($datei) {
        
self::$datei $datei;
        
        return 
date("H:i d.m.Y"filemtime(self::$dir."/".self::$datei.".txt"));
    }
}
?>
Es sollte eigentlich jedem klar sein, was man damit machen kann.

Möglicher Aufruf:
PHP Code:
Cache::cacheIt("status""lalala");
Cache::cacheAvaible("status"8400);
echo 
Cache::getCreateTime("status"); 
mfg
09/01/2012 18:30 Lewfire#2
YEY! Danke :*
09/01/2012 18:33 ηєσχ#3
super von dir
09/01/2012 18:34 Perfection-#4
nice , aber ich glaube kaum das jeder hier weis was es ist, da einfach nicht jeder die php kentnisse hat ( was auch nicht notwendig ist ).
09/01/2012 18:36 .Aza'#5
Ich zB weis es nicht wirklich^^ Ich kann mir zwar was darunter vorstellen, aber richtig ahnung hab ich davon nicht.

Könntest es vll erklären?
09/01/2012 18:36 NotEnoughForYou#6
Quote:
Originally Posted by .Xero View Post
nice , aber ich glaube kaum das jeder hier weis was es ist, da einfach nicht jeder die php kentnisse hat ( was auch nicht notwendig ist ).
ist auch eig. für die Leute die neue Scripts schreiben. Ist ja eh nichts großes was man eig auch selber schnell geschrieben hat, aber hatte schon so lange nichts mehr released :D. Wenn man auch nicht gerade alles Selected und einigermaßen vernünftig codet und keine 4000 Leute auf seiner Seite hat kommt man auch ohne aus nur so gehts dann schneller :)


@canyx:

damit kann man Inhalte cachen. Zb. die Rangliste. Dann wird nur alle 24h oder 12 oder wie man es will die Rangliste aktualisiert --> also auch nur alle 24 / 12 / whatever der Request an die DB gestellt --> spart Mysql Ressourcen --> läd schneller
09/01/2012 19:23 'Roccat™#7
geht doch auch mit cloudflare ?
09/01/2012 19:35 Aze /..#8
Cool, geile Sache ^^
09/01/2012 19:40 Harky-D#9
Nice danke dir! :-)
09/01/2012 19:47 IgorGlock#10
Ich weiß nicht ob solch' Cache überhaupt was bringt.
Ich mein, MySQL Datenbank ist dafür gut und nicht txt Datenbank. Je nach Nutzung kann aber txt "Zwischenspeicher" gut sein, doch nicht für Metin2.
09/01/2012 19:52 iSouli~#11
Quote:
Originally Posted by IgorGlock View Post
Ich weiß nicht ob solch' Cache überhaupt was bringt.
Ich mein, MySQL Datenbank ist dafür gut und nicht txt Datenbank. Je nach Nutzung kann aber txt "Zwischenspeicher" gut sein, doch nicht für Metin2.
Also auf Zephion / Alzoria hat es perfekt funktioniert bei bis zu 1000 Spielern.

#die offiziellen Server machen es doch auch so
09/01/2012 20:27 Computerfreek#12
Quote:
Originally Posted by IgorGlock View Post
Ich weiß nicht ob solch' Cache überhaupt was bringt.
Ich mein, MySQL Datenbank ist dafür gut und nicht txt Datenbank. Je nach Nutzung kann aber txt "Zwischenspeicher" gut sein, doch nicht für Metin2.
Wenn du denn nicht weißt, ob sowas überhaupt was bringt dann tu mir doch den gefallen und frag davor nach oder geh googeln, bevor du irgendwelche Behauptungen ohne Hand und Fuß in die Welt setzt.

Wenn man einen externen MySQL-Server hat, welcher wirklich die komplette Last aushält dann ist eine Non-Caching Variante die bessere Wahl. Da das bei Metin2 aber nur seltenst der Fall ist, sollte man auf Caching auf jeden Fall zurückgreifen.
Im optimalsten Falle hat man dann eine SSD verbaut, so dass man das meiste aus dem Vorgang rausholen kann.
Will man das ganze noch ein wenig schneller (und besser), so sollte man das memcache-Modul laden.
Wenn man alles richtig in Verbindung miteinander setzt, kann man sogar die Ladezeit der Homepage (je nach SQL-Server und größe der Bilder darauf) um 5-15% beschleunigen, da die Datenbankabfragen deutlich weniger werden und die Ergebnisse durch das Caching schneller geliefert werden können.

Und wie mein Vorposter schon gesagt hat, auch offizielle Server und viele große Seiten benutzen Caching da die SQL-Serverlast sonst einfach zu groß wird.
09/01/2012 20:37 iYoshix3#13
Wenn man nen guten MySql Server hat, braucht man das eig garnicht.
Würde es evntl. nur für die Rangliste nützlich finden.

Mfg
09/01/2012 21:09 Whit3W0lf#14
Wie es der Computerfreek beschrieben und eklärt hat stimmt alles!
Wieso sollte man unnötig Resourcen verbrauchen wenn man sie "sparen" kann wenn überhaupt?
09/01/2012 22:12 IgorGlock#15
Metin2 Rangliste Cachen => JA
Rest wie z.B.: Account Name, Löschcode, Email, Vorname und i-was noch lohnt sich nicht zu cachen.
Was sich lohnt zu Cachen sind die Statistiken wie z.B.: Userzahlen, Itemsanzahlen etc..
Im Henniks Admin Panel lohnt es sich noch im Charakteransicht die Informationen zu zwischenspeichern, dann aber nur 1x am Tag höchstens die Seite aufgerufen wird, macht das ja auch kein Sinn.

Sinn ist nur bei: komplexen Abfragen mit Resultat den man öfter die Stunde braucht und der nicht unbedingt bei jeden Klick geladen werden muss.

Webserver sind selten mit SSD ausgestattet, daher würde ich lieber die Festplatte des Webservers eher schonen und die Datenbank dafür lieber knallen, dafür ist(sollte) der MySQL Server ja auch ausgelegt sein, das von Hardware sich von Webserver unterscheidet.

Also Metin2Kinder, geht eure 0815 Webserver ertränken.