Voor een CMS ben ik bezig met een cache. Hierin wordt de uitvoer van de template-engine van het CMS opgeslagen. Veel voorbeelden die ik (via search) vond doen ongeveer dit:
- Neem $_SERVER['REQUEST_URI'] en stop dit in md5()
- Plak er een extensie achter om een bestandsnaam te krijgen
- Kijk in een bepaalde dir of er een bestand bestaat met die bestandsnaam
- Als het bestand bestaat, kijk hoe oud het is, en update eventueel het bestand
- Stuur de inhoud van het bestand naar de browser
Het probleem echter met deze methode is -volgens mij- dat je het wel makkelijk maakt om je server "over zijn nek te helpen". Als je namelijk het URL maar 1 teken wijzigt komt er een nieuw bestand op de server. Kortom als je een scriptje schrijft dat een paar duizend verschillende URL's stuurt (countertje erin opnemen), dan komen er even zovele bestandjes bij op de server. Theoretisch gezien zou je hier dus net zolang mee door kunnen gaan tot de server vol staat (in de praktijk zal dit lang duren maar dat even terzijde).
De enige echte oplossing voor dit probleem leek me het niet meer cachen van templates waarbij GET/POST data gebruikt wordt en dan cachen op templatenaam i.p.v. request_uri. Maar dan kunnen dus behoorlijk wat templates niet meer gecached worden.
Andere oplossingen waar ik zo snel op kon komen waren:
- niet meer dan x cachefiles per template aanmaken
- cache niet groter dan x files
Maar dat levert dus wel wat extra rekenwerk op. Iemand misschien een beter idee?
- Neem $_SERVER['REQUEST_URI'] en stop dit in md5()
- Plak er een extensie achter om een bestandsnaam te krijgen
- Kijk in een bepaalde dir of er een bestand bestaat met die bestandsnaam
- Als het bestand bestaat, kijk hoe oud het is, en update eventueel het bestand
- Stuur de inhoud van het bestand naar de browser
Het probleem echter met deze methode is -volgens mij- dat je het wel makkelijk maakt om je server "over zijn nek te helpen". Als je namelijk het URL maar 1 teken wijzigt komt er een nieuw bestand op de server. Kortom als je een scriptje schrijft dat een paar duizend verschillende URL's stuurt (countertje erin opnemen), dan komen er even zovele bestandjes bij op de server. Theoretisch gezien zou je hier dus net zolang mee door kunnen gaan tot de server vol staat (in de praktijk zal dit lang duren maar dat even terzijde).
De enige echte oplossing voor dit probleem leek me het niet meer cachen van templates waarbij GET/POST data gebruikt wordt en dan cachen op templatenaam i.p.v. request_uri. Maar dan kunnen dus behoorlijk wat templates niet meer gecached worden.
Andere oplossingen waar ik zo snel op kon komen waren:
- niet meer dan x cachefiles per template aanmaken
- cache niet groter dan x files
Maar dat levert dus wel wat extra rekenwerk op. Iemand misschien een beter idee?