Moodle 2.4 saw the introduction of the MUC: Moodle Universal Cache. The cache is actually comprised of a number of smaller caches, defined in /lib/db/caches.php and the caches.php files of the various plugins (e.g. mod/yourmod/db/caches.php).
See the Cache API and the Quick reference. The most succinct overview is in Moodle's github repo.
In your plugin, create a file db/caches.php:
$definitions = array(
'labelcontent' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true, // keys limited to a-zA-Z0-9_ (better performance)
'simpledata' => true, // data type limited to scalar (e.g. strings, integers) or array of scalars
)
);
Now you're ready to use the cache in your code. Use the current language as part of your key:
$cache = cache::make('mod_my_plugin', 'labelcontent');
// Compose the cache key, e.g. based on the instance id of your plugin
$key = current_language() . $id;
if (!$data = $cache->get($key)) {
// Data was not cached yet, so retrieve:
$data = $DB->get_record('mdl_my_plugin_some_table', array('id' => $id));
$cache->set($key, $data);
}
return $data;
To delete a cache, you first have to retrieve the cache, using a make function ('make' denotes the activity of using a class factory, not the making of a cache). Then, using the cache object, you can call the delete method.
// Delete the cache, for caching issue with groups
$cache = cache::make('core', 'groupdata');
$cache->delete($enrollment->courseid);
How do you know which id you can use as the parameter for cache#delete? If you created the cache key yourself, then you use that key of course:
$cache->delete(current_language() . $id);
For other cases it looks as though it's defined in the lib/db/caches.php file. For instance, for groupdata, the definition is:
// Groupings belonging to a course.
// A simple cache designed to replace $GROUPLIB_CACHE->groupings.
// Items are organised by course id and are essentially course records.
'groupdata' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true, // The course id the groupings exist for.
'simpledata' => true, // Array of stdClass objects containing only strings.
'staticacceleration' => true, // Likely there will be a couple of calls to this.
'staticaccelerationsize' => 2, // The original cache used 1, we've increased that to two.
),
The other method to delete a cache, is by using the cache_helper::invalidate_by_definition method:
cache_helper::invalidate_by_definition('core', 'databasemeta', array('dbfamily' => $DB->get_dbfamily()));
If you're ever want to modify the database through your mod's install.php file, you're going to need this helper!