Webstatt.org - Community seit 2006 - 2012 (2024?)

cache + serialize

Avatar user-287
30.07.2007 15:03

Hallo,
Ich habe mir eine Cache Klasse gebastelt.
Da aber serialize und unserialize auch Zeit kostet und der Cache möglichst schnell sein soll, soll die serialize funktion nur optional sein, bzw. nur dann wenn es auch sinnvoll ist.
Also nur Objekte und Arrays sollen mit serialize behandelt werden, dass ist ja auch beim speichern in den Cache kein Problem.
Nur wenn ich das dann wieder aus dem Cache lade, wie kann ich wissen, ob der Inhalt nun mit serialized behandelt wurde? Dese überprüfung sollte natürlich nicht sehr umständlich sein zwinkern
Warum gibt es keine funktion wie is_serialized() ?

user-343
30.07.2007 15:20

Solange du nicht alles in eine Datei packst kannst du ja normale Variablen als .cache speichern und serialisierte Variablen als .ser.cache. z.B. ^^

Im übrigen ist es oft so (vor allem bei stark frequentierten Seiten), dass MySQL der Flaschenhals ist, und nicht PHP. Ein paar mal unserialize mehr ist trotzdem noch schneller als X Datensätze wieder zu "lesen". ^^

Avatar user-287
30.07.2007 15:24

Original von user-343
Solange du nicht alles in eine Datei packst kannst du ja normale Variablen als .cache speichern und serialisierte Variablen als .ser.cache. z.B. ^^

Im übrigen ist es oft so (vor allem bei stark frequentierten Seiten), dass MySQL der Flaschenhals ist, und nicht PHP. Ein paar mal unserialize mehr ist trotzdem noch schneller als X Datensätze wieder zu "lesen". ^^


Ich denke ich serialize einfach alles, ist glaub ich ~genauso schnell wie es so zu überprüfen was es nun ist.

user-343
30.07.2007 15:36

Ich frage mich gerade: Es macht nur Sinn, Objekte und Arrays zu serialisieren. Und die *kann* man nicht anders speichern. Ausgenommen Arrays, da könnte man wieder n' PHP-Script basteln, aber ob das wirklich Sinn macht?

Avatar user-287
30.07.2007 15:52

Original von user-343
Ich frage mich gerade: Es macht nur Sinn, Objekte und Arrays zu serialisieren. Und die *kann* man nicht anders speichern. Ausgenommen Arrays, da könnte man wieder n' PHP-Script basteln, aber ob das wirklich Sinn macht?


Jo Deswegen, nur wie unterscheidet man einen String von einem serializierten Objekt/Array

user-343
30.07.2007 20:47

Check das Muster.... ;p

(Mir ergibt sich den Sinn vom Speichern einzelner Strings irgendwie nicht?)

Avatar user-287
30.07.2007 22:47

Ein String könnt ja auch der ganze output sein.

user-303
30.07.2007 23:01

test:

<?php
$start = microtime(true);
$ar = array();
for($i=0;$i<100000;$i++) {
$t = md5(microtime(true).rand(0,99));
$ar[$i] = serialize($t);
}

echo 'serialize: '.(microtime(true) - $start).'<br>';


$start = microtime(true);
$ar2 = array();
for($i=0;$i<100000;$i++) {
$t = md5(microtime(true).rand(0,99));
$ar2[$i] = is_string($t); //macht keinen sinn, aber um das ergebnis nicht zu verfälschen!
}

echo 'is_string: '.(microtime(true) - $start).'<br>';

$start = microtime(true);
for($i=0;$i<100000;$i++) {
md5(microtime(true).rand(0,99)); // um das ergebnis nicht zu verfälschen
serialize($ar[$i]);
}

echo 'unserialize: '.(microtime(true) - $start);

?>


ausgabe:
serialize: 1.96216917038
is_string: 1.83440518379
unserialize: 1.8778719902


also du bräuchtest beim abspeichern schon genau so lange zum prüfen, ob es nun serialisiert werden soll oder nicht, als es einfach zu tun.
jag einfach alles durch serialize, und unserialize nacher wieder alles. bist du am besten dran