/**
  * Regenerate / invalidate service cache for current page
  */
 public function regenerateData()
 {
     global $wgMemc;
     wfProfileIn(__METHOD__);
     wfDebug(__METHOD__ . ": page #{$this->pageId}\n");
     // invalidate cached data from getMostLinkedCategories()
     $wgMemc->delete($this->getKey('mostlinkedcategories'));
     // invalidate cached data from getCurrentRevision()
     $wgMemc->delete($this->getKey('current-revision'));
     // invalidate cached data from getPreviousEdits()
     $wgMemc->delete($this->getKey('previous-edits'));
     // invalidate cached data from getCommentsCount()
     $title = Title::newFromId($this->pageId, Title::GAID_FOR_UPDATE);
     if (!empty($title)) {
         $pageName = $title->getPrefixedText();
         wfDebug(__METHOD__ . ": page '{$pageName}' has been touched\n");
         // invalidate cache with number of comments / talk page revisions
         if ($title->isTalkPage()) {
             if (self::isArticleCommentsEnabled() && ArticleComment::isTitleComment($title)) {
                 // get subject page for this article comment
                 $parts = ArticleComment::explode($title->getText());
                 $title = Title::newFromText($parts['title'], MWNamespace::getSubject($title->getNamespace()));
                 wfDebug(__METHOD__ . ": article comment added\n");
             } else {
                 // get subject page for this talk page
                 $title = $title->getSubjectPage();
             }
             $contentPageName = $title->getPrefixedText();
             wfDebug(__METHOD__ . ": talk page / article comment for '{$contentPageName}' has been touched\n");
             $contentPageService = new self($title->getArticleId());
             $contentPageService->regenerateCommentsCount();
         }
     }
     wfProfileOut(__METHOD__);
     return true;
 }