В Joomla 1.6 и выше каждый компонент который написан в MVC стиле может быть прокеширован, для включения кеша на уровне компонента нужно в контроллере компонента по умолчанию изменить переменную $cachable в функции display с false на true например:

class MyComponentController extends JController {
 
   function display( $cachable = true ) {
      $this->default_view = 'category';
      parent::display( $cachable );
   }
 
}

Такое кеширование имеет один существенный недостаток! так как кешируется весь вид и все плагины которые были использованы в этом виде, и при выводе контролер проверяет или есть эта страница в кеше и обходя работу шаблона и модуля будут грузить все данные из файла, в итоге будет уже полностью отработанный скрипт, в этом случае если первым зайдет администратор и для него будут отображены какие то скрытые элементы то для обычного пользователя они тоже будут видны!

В этом случае конечно можно отключать кеширование для администратора, но можно и кешировать отдельные запросы для компонента и отключить полное кеширование!

Для кеширования нужно создать объект класса JCache:

$cache = JFactory::getCache( 'cache_name', '' );

Даже если кеширование в настройках отключено мы можем принудительно включить кешиирование дописав строку:

$cache->setCaching(true);

После этого нам нужно проверить или данные прокешированны и если данных нет в кеше то получить данные, допустим из таблицы, и внести их в кеш для дальнейшего использования. Для этого используем следующий код

$cache = JFactory::getCache( 'cache_name', '' );
//проверяем или данные с $id не вставлены в кеш с названием cache_name
if ( !( $items = $cache->get( $id, 'cache_name' ) ) ) {
//если данных нет то получаем данные из нужного нам хранилища допустим
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select( '*' )->from( '#__content' )->where( 'state=1' );
$items = $db->setQuery( $query )->loadObjectList();
//кешируем данные
//первый параметр данные для кеширования, второй идентификатор третий название кеша
$cache->store( $items, $id, 'cache_name' );
}

После второго вызова данного кода в переменной $items будут данные уже не с базы данных а с прокешировнных данных

для очистки кеша нужно вызвать метод remove($id, 'cache_name')