Manual:Interwiki cache

MediaWiki has a database table (interwiki table) for interwiki prefixes. This is by default used directly, but two types of caching can be used for better performance.

Database and memcached

When memcached is enabled, the interwiki prefixes of the database table will be cached too. This can be controlled using the $wgInterwikiExpiry setting.

This cache can be cleared using the clearInterwikiCache.php script. It removes the caching based on the prefixes found in the database table.

Interwiki cache

The $wgInterwikiCache variable can be set to a static array that will be used instead of the database table, thus achieving even better performance by removing latencies to memcached and avoiding the database queries to populate a cache.

The array is typically stored in a PHP file containing <?php return array( .. ); and loaded by assigning it to $wgInterwikiCache with require.

MediaWiki does not currently provide a built-in script to build such a cache file (T35395), however the extension Extension:WikimediaMaintenance contains dumpInterwiki.php which is a WMF-specific script.

The $wgInterwikiScopes and $wgInterwikiFallbackSite settings are used when reading this cache.

Setting this up on your own wiki

  • You will need a copy of extension/WikimediaMaintenance; place this in the extensions directory in the root of your MediaWiki installation.
  • Retrieve the files all.dblist, special.dblist, and langlist and put them someplace (e.g. in a subdir in the base of your MediaWiki installation) for convenience.
  • Edit extension/WikimediaMaintenance/dumpInterwikis.php and change the path /srv/mediawiki for those three files to the path to the directory where you just put them.
  • From the base of your MediaWiki installation, do
    echo 'print WikiMap::getCurrentWikiId();' | php maintenance/eval.php
Add this value to all.dblist, assuming it's not already in there. If it does not start with a known language code (e.g. it is, say, 'wikitech-mw_' instead of something nice like 'frwiktionary'), add it also to special.dblist. You can check the language codes in the langlist file you copied over.
  • From the base of your MediaWiki installation, do
    php extensions/WikimediaMaintenance/dumpInterwiki.php > cache/new-interwikis.php
    or in versions since MediaWiki 1.40:
    ./maintenance/run extensions/WikimediaMaintenance/dumpInterwiki.php > cache/new-interwikis.php
  • From the base of your MediaWiki installation, make a copy of any existing cache/interwiki.db file you may have and then do
    cp cache/new-interwikis.php cache/interwiki.php
  • Edit LocalSettings.php and add
    $wgInterwikiCache = require "$IP/cache/interwiki.php";

Now shortcuts and all other iw links should work for your project. Note that if you added it to 'special.dblist', it will behave as though it is a 'wikipedia' with en as the default language.