MDL-58160 coursecat: Use set_many to populate category cache

When the course category cache needs to be repopulated, two entries are added
to the cache for each category. In core this is currently done in a for-loop,
resulting in N set calls to the cache (where N is twice the number of
categories in Moodle).

This change switches that code to using a single set_many cache call instead,
which makes this an O(1) operation instead of O(N).

For a site with say, 1000 categories, this results in only 1 set call to the
cachestore instead of 2000.
This commit is contained in:
Adam Olley 2017-03-06 11:59:19 +10:30
parent 3c45d26f58
commit b3e4fbc011

View file

@ -626,9 +626,7 @@ class coursecat implements renderable, cacheable_object, IteratorAggregate {
}
// We must add countall to all in case it was the requested ID.
$all['countall'] = $count;
foreach ($all as $key => $children) {
$coursecattreecache->set($key, $children);
}
$coursecattreecache->set_many($all);
if (array_key_exists($id, $all)) {
return $all[$id];
}