{"id":677,"date":"2009-05-11T00:43:38","date_gmt":"2009-05-10T22:43:38","guid":{"rendered":"http:\/\/www.bytopia.dk\/blog\/?p=677"},"modified":"2009-05-11T08:02:23","modified_gmt":"2009-05-11T06:02:23","slug":"wordpress-og-xcache","status":"publish","type":"post","link":"https:\/\/www.bytopia.dk\/blog\/2009\/05\/11\/wordpress-og-xcache\/","title":{"rendered":"WordPress og XCache"},"content":{"rendered":"<p>P\u00e5 min server k\u00f8rer jeg et par WordPress installationer, og bruger XCache til at speede tingene lidt op ved at cache de kompilerede PHP scripts, hvilket fungerer up\u00e5klageligt. XCache har dog ogs\u00e5 en funktionalitet hvor den kan cache ofte brugte data, s\u00e5 den sparer nogle databaseopslag, men denne funktionalitet kr\u00e6ver at WordPress underst\u00f8tter den. Det g\u00f8r WordPress s\u00e5dan set ogs\u00e5, i og med den tilbyder et API hvor man selv kan skrive sine egne cache plugins, der fx bruger XCache.<\/p>\n<p>S\u00e5dan et XCache plugin til Wordress har <a href=\"http:\/\/neosmart.net\/dl.php?id=12\">NeoSmart<\/a> lavet. Desv\u00e6rre virker det ikke helt efter hensigten, fx bliver visse data gemt for altid, hvilket bevirker at nogle sider aldrig \u00e6ndrer sig, selvom det er meningen at de skal. Desv\u00e6rre ser det ikke ud til at NeoSmart har t\u00e6nkt sig at g\u00f8re noget ved det. Det er jeg ikke den eneste der er tr\u00e6t af, s\u00e5 en fyr ved navn Dougal Campbell har rettet fejlene i NeoSmart&#8217;s plugin og <a href=\"http:\/\/dougal.gunters.org\/blog\/2008\/08\/29\/xcache-object-cache-plugin-for-wordpress-25\">publiseret disse rettelser<\/a>.<\/p>\n<p>Jeg har fors\u00f8gt at anvende sidstn\u00e6vnte plugin, men der var en ting der ikke virkede. N\u00e5r man loggede ind p\u00e5 administrationsdelen af WordPress, s\u00e5 fik man af og til en besked om at man ikke havde rettigheder til at se siden.\u00a0 Derfor opgav jeg at anvende dette plugin, indtil nu hvor jeg har fundet (og rettet) fejlen.<\/p>\n<p>Problemet er, at jeg k\u00f8rer flere WordPress installationer p\u00e5 samme server, der alle deler samme cache. N\u00e5r data gemmes i en cache, s\u00e5 gemmes det med en bestemt n\u00f8gle, s\u00e5 man senere kan sl\u00e5 op p\u00e5 den n\u00f8gle, og hente de data der ligger i cachen. WordPress har et bestemt navn til hver af disse n\u00f8gler, men n\u00e5r flere WordPress installationer deler den samme cache, s\u00e5 kommer de ogs\u00e5 til at tilg\u00e5 hinandens data, da de sl\u00e5r op efter den samme n\u00f8gle i cachen. Det betyder at den f\u00f8rste der pr\u00f8ver at logge p\u00e5 kan g\u00f8re det uden problemer, men herefter kan man ikke logge p\u00e5 de andre WordPress installationer, da de checker login op mod de\u00a0 (forkerte) cachede v\u00e6rdier.<\/p>\n<p>Da jeg f\u00f8rst inds\u00e5 dette, var det simpelt at fikse. I <strong>wp-config.php<\/strong> for hver WordPress installation definerer man en variabel <strong>$blog_id<\/strong> som man s\u00e6tter til noget unikt for hver blog, fx bloggens adresse. Derefter kr\u00e6ver det blot en s\u00f8lle \u00e6ndring i <strong>object-cache.php<\/strong>: I funktionen <strong>key($key, $group)<\/strong> skal man erstatte linjen <strong>$prefix = &#8221;;<\/strong> med <strong>$prefix = $blog_id;<\/strong>. Dette s\u00e6tter et unikt (for hver blog) pr\u00e6fix p\u00e5 disse n\u00f8gler, s\u00e5 der nu ikke kan v\u00e6re overlap mellem dem.<\/p>\n<p>Alle WordPress blogs p\u00e5 denne server k\u00f8rer nu med XCache, hvilket giver et lille performance boost. P\u00e5 nogle blogs er dette dog mere m\u00e6rkbart end andre.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>P\u00e5 min server k\u00f8rer jeg et par WordPress installationer, og bruger XCache til at speede tingene lidt op ved at cache de kompilerede PHP scripts, hvilket fungerer up\u00e5klageligt. XCache har dog ogs\u00e5 en funktionalitet hvor den kan cache ofte brugte data, s\u00e5 den sparer nogle databaseopslag, men denne funktionalitet kr\u00e6ver at WordPress underst\u00f8tter den. Det [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-677","post","type-post","status-publish","format-standard","hentry","category-computer"],"_links":{"self":[{"href":"https:\/\/www.bytopia.dk\/blog\/wp-json\/wp\/v2\/posts\/677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bytopia.dk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bytopia.dk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bytopia.dk\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bytopia.dk\/blog\/wp-json\/wp\/v2\/comments?post=677"}],"version-history":[{"count":3,"href":"https:\/\/www.bytopia.dk\/blog\/wp-json\/wp\/v2\/posts\/677\/revisions"}],"predecessor-version":[{"id":681,"href":"https:\/\/www.bytopia.dk\/blog\/wp-json\/wp\/v2\/posts\/677\/revisions\/681"}],"wp:attachment":[{"href":"https:\/\/www.bytopia.dk\/blog\/wp-json\/wp\/v2\/media?parent=677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bytopia.dk\/blog\/wp-json\/wp\/v2\/categories?post=677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bytopia.dk\/blog\/wp-json\/wp\/v2\/tags?post=677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}