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

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

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