Version 2 (modified by moo, 11 years ago) (diff)


Content Shared Hash Caching

The problem

Many of you run your own server/vps that install only 1 copy of each web applications under your server document root, while some other of you, the vhost provider, allow every user install their own copy. For example, ​vBulletin may be installed under each user's vhost document root. This result in not only disk read/seek without XCache installed, but also consume huge memory for caching them with XCache installed. Most *.php file is bigger after compiled/cached.

The Solution

XCache has introduced a way to solve this headache once and for all. This is called content shared hash caching. Whatever it called, let's see what it does.

It's easier to demonstrate in PHP pseudo code.

function file_entry($filename) {
  if (hash_on_inode()) {
    $stat = stat($filename);
    $hash = hash($stat['inode']);
  else {
    $hash = hash($filename);

  if (!isset($cache[$hash])) {
    $md5 = md5sum($filename);
    if (!isset($phpcache[$md5])) {
      $phpcache[$md5] = php_compile_file($compile);
    $cache[$hash] = &$phpcache[$md5]; // reference, important
  return $cache[$hash];