CINXE.COM

Memcached for MediaWiki - Wikitech

<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Memcached for MediaWiki - Wikitech</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )labswikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat": "dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"c78cd35a-936a-4931-8223-77859f71389e","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Memcached_for_MediaWiki","wgTitle":"Memcached for MediaWiki","wgCurRevisionId":2246531,"wgRevisionId":2246531,"wgArticleId":3214,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["How-To","Caching","MediaWiki production","SRE Service Operations"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Memcached_for_MediaWiki","wgRelevantArticleId":3214,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikitech","wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault": true,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":10000,"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgDiscussionToolsFeaturesEnabled":{"replytool":true,"newtopictool":true,"sourcemodetoolbar":true,"topicsubscription":false,"autotopicsub":false,"visualenhancements":false,"visualenhancements_reply":false,"visualenhancements_pageframe":false},"wgDiscussionToolsFallbackEditMode":"visual","wgULSPosition":"personal","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"wgSiteNoticeId":"2.0"};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready", "user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","ext.discussionTools.init.styles":"ready","oojs-ui-core.styles":"ready","oojs-ui.styles.indicators":"ready","mediawiki.widgets.styles":"ready","oojs-ui-core.icons":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.pt":"ready","ext.dismissableSiteNotice.styles":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","mediawiki.page.media","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.site","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth", "ext.discussionTools.init","ext.eventLogging","ext.wikimediaEvents","ext.uls.interface","ext.checkUser.clientHints","ext.dismissableSiteNotice"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=ext.cite.styles%7Cext.discussionTools.init.styles%7Cext.dismissableSiteNotice.styles%7Cext.pygments%7Cext.uls.pt%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=en&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=site.styles&amp;only=styles&amp;skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Memcached for MediaWiki - Wikitech"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="icon" href="/static/favicon/wikitech.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikitech (en)"> <link rel="EditURI" type="application/rsd+xml" href="//wikitech.wikimedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://wikitech.wikimedia.org/wiki/Memcached_for_MediaWiki"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"> <link rel="alternate" type="application/atom+xml" title="Wikitech Atom feed" href="/w/index.php?title=Special:RecentChanges&amp;feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="ext-discussiontools-replytool-enabled ext-discussiontools-newtopictool-enabled ext-discussiontools-sourcemodetoolbar-enabled skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Memcached_for_MediaWiki rootpage-Memcached_for_MediaWiki skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-Server-admin-log:-Prod" class="mw-list-item"><a href="/wiki/Server_Admin_Log"><span>Server admin log: Prod</span></a></li><li id="n-Admin-log:-RelEng" class="mw-list-item"><a href="/wiki/Release_Engineering/SAL"><span>Admin log: RelEng</span></a></li><li id="n-Incident-status" class="mw-list-item"><a href="/wiki/Incident_status"><span>Incident status</span></a></li><li id="n-Deployments" class="mw-list-item"><a href="/wiki/Deployments"><span>Deployments</span></a></li><li id="n-SRE-Team-Help" class="mw-list-item"><a href="/wiki/SRE/SRE_Team_requests"><span>SRE Team Help</span></a></li> </ul> </div> </div> <div id="p-Cloud_VPS_&amp;_Toolforge" class="vector-menu mw-portlet mw-portlet-Cloud_VPS_Toolforge" > <div class="vector-menu-heading"> Cloud VPS &amp; Toolforge </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-Cloud-VPS-portal" class="mw-list-item"><a href="/wiki/Portal:Cloud_VPS"><span>Cloud VPS portal</span></a></li><li id="n-Toolforge-portal" class="mw-list-item"><a href="/wiki/Portal:Toolforge"><span>Toolforge portal</span></a></li><li id="n-Request-VPS-project" class="mw-list-item"><a href="https://phabricator.wikimedia.org/project/view/2875/"><span>Request VPS project</span></a></li><li id="n-Admin-log:-Cloud-VPS" class="mw-list-item"><a href="/wiki/Cloud_VPS_Server_Admin_Log"><span>Admin log: Cloud VPS</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikitech.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikitech" src="/static/images/mobile/copyright/wikitech-wordmark.svg" style="width: 8.75em; height: 1.6875em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikitech [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikitech" aria-label="Search Wikitech" autocapitalize="sentences" title="Search Wikitech [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-uls" class="mw-list-item active user-links-collapsible-item"><a data-mw="interface" href="#" class="uls-trigger cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>English</span></a> </li> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page&#039;s font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=spontaneous&amp;uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&amp;returnto=Memcached+for+MediaWiki" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out user-links-collapsible-item" title="More options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=spontaneous&amp;uselang=en"><span>Donate</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=Memcached+for+MediaWiki" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><div id="mw-dismissablenotice-anonplace"></div><script>(function(){var node=document.getElementById("mw-dismissablenotice-anonplace");if(node){node.outerHTML="\u003Cdiv class=\"mw-dismissable-notice\"\u003E\u003Cdiv class=\"mw-dismissable-notice-close\"\u003E[\u003Ca tabindex=\"0\" role=\"button\"\u003Edismiss\u003C/a\u003E]\u003C/div\u003E\u003Cdiv class=\"mw-dismissable-notice-body\"\u003E\u003C!-- CentralNotice --\u003E\u003Cdiv id=\"localNotice\" data-nosnippet=\"\"\u003E\u003Cdiv class=\"sitenotice\" lang=\"en\" dir=\"ltr\"\u003E\u003Ctable style=\"width: 75%; background-color: var(--background-color-warning-subtle, #fdf2d5); border: var(--border-subtle, 1px solid #987027); color: var(--color-base, #202122); border-radius: 10px; padding: 5px; margin: 0 auto;\"\u003E\n\u003Ctbody\u003E\u003Ctr\u003E\n\u003Ctd style=\"width:40px; height:40px; text-align:center; vertical-align:middle; padding: 2px;\"\u003E\u003Cspan typeof=\"mw:File\"\u003E\u003Ca href=\"/wiki/File:OOjs_UI_icon_alert-warning.svg\" class=\"mw-file-description\"\u003E\u003Cimg src=\"//upload.wikimedia.org/wikipedia/commons/thumb/3/3b/OOjs_UI_icon_alert-warning.svg/30px-OOjs_UI_icon_alert-warning.svg.png\" decoding=\"async\" width=\"30\" height=\"30\" class=\"mw-file-element\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/3/3b/OOjs_UI_icon_alert-warning.svg/45px-OOjs_UI_icon_alert-warning.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/3b/OOjs_UI_icon_alert-warning.svg/60px-OOjs_UI_icon_alert-warning.svg.png 2x\" data-file-width=\"20\" data-file-height=\"20\" /\u003E\u003C/a\u003E\u003C/span\u003E\n\u003C/td\u003E\n\u003Ctd style=\"text-align:center; vertical-align: middle; padding: 4px; max-height: 60px;\"\u003E\u003Cb\u003EWe are migrating Wikitech to \u003Ca href=\"/wiki/Wikitech/SUL-migration\" title=\"Wikitech/SUL-migration\"\u003ESUL\u003C/a\u003E!\u003C/b\u003E\n\u003Cp\u003E\u003Cb\u003EAction may be required for your \u003Ca href=\"/wiki/Wikitech/SUL-migration#What_You_Should_Do\" title=\"Wikitech/SUL-migration\"\u003E account\u003C/a\u003E!\u003C/b\u003E\n\u003C/p\u003E\u003Cp\u003E\u003Cb\u003ETrouble logging in? Please visit \u003Ca href=\"https://phabricator.wikimedia.org/T376267\" class=\"extiw\" title=\"phab:T376267\"\u003ET376267\u003C/a\u003E\u003C/b\u003E\n\u003C/p\u003E\n\u003C/td\u003E\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E";}}());</script></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Beginning</div> </a> </li> <li id="toc-Magic_numbers" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Magic_numbers"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Magic numbers</span> </div> </a> <ul id="toc-Magic_numbers-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-WANObjectCache" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#WANObjectCache"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>WANObjectCache</span> </div> </a> <button aria-controls="toc-WANObjectCache-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle WANObjectCache subsection</span> </button> <ul id="toc-WANObjectCache-sublist" class="vector-toc-list"> <li id="toc-High_level" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#High_level"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>High level</span> </div> </a> <ul id="toc-High_level-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Memcached_commands" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Memcached_commands"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span>Memcached commands</span> </div> </a> <ul id="toc-Memcached_commands-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Getting_revision/page_from_WANCache_key" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Getting_revision/page_from_WANCache_key"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3</span> <span>Getting revision/page from WANCache key</span> </div> </a> <ul id="toc-Getting_revision/page_from_WANCache_key-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Infrastructure" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Infrastructure"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Infrastructure</span> </div> </a> <button aria-controls="toc-Infrastructure-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Infrastructure subsection</span> </button> <ul id="toc-Infrastructure-sublist" class="vector-toc-list"> <li id="toc-Mcrouter" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Mcrouter"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Mcrouter</span> </div> </a> <ul id="toc-Mcrouter-sublist" class="vector-toc-list"> <li id="toc-Mcrouter_Routes" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Mcrouter_Routes"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1.1</span> <span>Mcrouter Routes</span> </div> </a> <ul id="toc-Mcrouter_Routes-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Example" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Example"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1.2</span> <span>Example</span> </div> </a> <ul id="toc-Example-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> </ul> </li> <li id="toc-Servers" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Servers"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Servers</span> </div> </a> <ul id="toc-Servers-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Runbooks" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Runbooks"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Runbooks</span> </div> </a> <ul id="toc-Runbooks-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Dashboards" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Dashboards"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Dashboards</span> </div> </a> <ul id="toc-Dashboards-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Links"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Links</span> </div> </a> <ul id="toc-Links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Memcached for MediaWiki</span></h1> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Memcached_for_MediaWiki" title="View the content page [c]" accesskey="c"><span>Page</span></a></li><li id="ca-talk" class="new vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Talk:Memcached_for_MediaWiki&amp;action=edit&amp;redlink=1" rel="discussion" class="new" title="Discussion about the content page (page does not exist) [t]" accesskey="t"><span>Discussion</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Memcached_for_MediaWiki"><span>Read</span></a></li><li id="ca-viewsource" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Memcached_for_MediaWiki&amp;action=edit" title="This page is protected.&#10;You can view its source [e]" accesskey="e"><span>View source</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Memcached_for_MediaWiki&amp;action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Memcached_for_MediaWiki"><span>Read</span></a></li><li id="ca-more-viewsource" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Memcached_for_MediaWiki&amp;action=edit"><span>View source</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Memcached_for_MediaWiki&amp;action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Memcached_for_MediaWiki" title="A list of all wiki pages that link here [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Memcached_for_MediaWiki" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Memcached_for_MediaWiki&amp;oldid=2246531" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Memcached_for_MediaWiki&amp;action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&amp;page=Memcached_for_MediaWiki&amp;id=2246531&amp;wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&amp;url=https%3A%2F%2Fwikitech.wikimedia.org%2Fwiki%2FMemcached_for_MediaWiki"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&amp;url=https%3A%2F%2Fwikitech.wikimedia.org%2Fwiki%2FMemcached_for_MediaWiki"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Special:Book&amp;bookcmd=book_creator&amp;referer=Memcached+for+MediaWiki"><span>Create a book</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&amp;page=Memcached_for_MediaWiki&amp;action=show-download-screen"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Memcached_for_MediaWiki&amp;printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikitech</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r2230541">.mw-parser-output .tpl-navinfra--portal{float:none}.mw-parser-output .tpl-navinfra--portal .tpl-navsidebar-contents{margin:0 8px;display:flex;flex-flow:row wrap;gap:16px}.mw-parser-output .tpl-navinfra--portal .tpl-navsidebar-content{break-inside:avoid}.mw-parser-output .tpl-navinfra--sidebar .tpl-navsidebar-content{margin:0}.mw-parser-output .tpl-navinfra--sidebar .tpl-navsidebar-heading{font-weight:normal;margin:1px 0 0 0}.mw-parser-output .tpl-navinfra--sidebar .tpl-navsidebar-heading a{display:block;border-top:1px solid var(--border-color-muted,#eaecf0);background-color:var(--background-color-neutral-subtle,#f8f9fa);color:var(--color-base,#202122);margin:0 -8px;padding:4px 8px 0px 8px}.mw-parser-output .tpl-navinfra--sidebar .tpl-navsidebar-heading a:hover{background-color:var(--background-color-base,#fff);color:var(--color-emphasized,#000)}.mw-parser-output ul{margin-top:unset!important}</style> <style data-mw-deduplicate="TemplateStyles:r2241375">.mw-parser-output .tpl-navsidebar{max-width:22em;background:var(--background-color-base,#fff);color:var(--color-base,#202122);border:1px solid var(--border-color-base,#a2a9b1);float:right;clear:right;margin:.5em 0 1em 1em}.mw-parser-output .tpl-navsidebar-floatright{float:right;clear:right;margin:.5em 0 1em 1em}.mw-parser-output .tpl-navsidebar-floatleft{float:left;clear:left;margin:.5em 1em 1em 0}.mw-parser-output .tpl-navsidebar-floatnone{float:none;clear:both;margin:.5em 0}.mw-parser-output .tpl-navsidebar-topimage{margin:0 0 16px 0}.mw-parser-output .tpl-navsidebar-title{margin:8px 16px;border-bottom:3px solid var(--border-color-muted,#eaecf0);font-size:20px;text-align:center}.mw-parser-output .tpl-navsidebar-image{margin:0 0 8px}.mw-parser-output .tpl-navsidebar-content{margin:0 0 16px 0;padding:0 8px}.mw-parser-output .tpl-navsidebar-heading{margin:8px 0;font-weight:bold}.mw-parser-output .tpl-navsidebar-foot{padding:0 8px;margin:0;text-align:right;font-size:smaller}@media not (min-width:720px){.mw-parser-output .tpl-navsidebar{float:none;clear:both;margin:.5em 0;max-width:none}}</style><div role="navigation" class="navigation-not-searchable tpl-navsidebar tpl-navinfra--sidebar" style=""><p class="tpl-navsidebar-title"><a href="/wiki/Wikimedia_infrastructure" title="Wikimedia infrastructure">Wikimedia infrastructure</a></p><div class="tpl-navsidebar-contents"><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Data_centers" title="Data centers">Data centers</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Network_design" title="Network design">Networking</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Global_traffic_routing" title="Global traffic routing">Global traffic routing</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/MediaWiki_at_WMF" title="MediaWiki at WMF">MediaWiki SRE</a></p><p class="mw-empty-elt"> </p><ul><li><a href="/wiki/Application_servers" title="Application servers">Application servers</a></li> <li><a href="/wiki/BounceHandler" title="BounceHandler">BounceHandler</a></li> <li><a href="/wiki/Application_servers/Runbook" title="Application servers/Runbook">PHP 7 and php-fpm</a></li> <li><a href="/wiki/Citoid" title="Citoid">Citoid</a></li> <li><a href="/wiki/Dumps" title="Dumps">Dumps</a></li> <li><a href="/wiki/Envoy" title="Envoy">Envoy</a></li> <li><a href="/wiki/External_storage" title="External storage">External storage</a></li> <li><a href="/wiki/MediaWiki_JobQueue" title="MediaWiki JobQueue">MediaWiki JobQueue</a></li> <li><a class="mw-selflink selflink">Memcached</a></li> <li><a href="/wiki/Memcached_for_MediaWiki/mcrouter" class="mw-redirect" title="Memcached for MediaWiki/mcrouter">Mcrouter runbook</a></li> <li><a href="/wiki/MediaWiki_HTTP_cache_headers" title="MediaWiki HTTP cache headers">MediaWiki HTTP cache headers</a></li> <li><a href="/wiki/MediaWiki_On_Kubernetes" title="MediaWiki On Kubernetes">MediaWiki On Kubernetes</a></li> <li><a href="/wiki/MediaWiki_and_EtcdConfig" title="MediaWiki and EtcdConfig">MediaWiki and EtcdConfig</a></li> <li><a href="/wiki/Mathoid" title="Mathoid">Mathoid</a></li> <li><a href="/wiki/Nutcracker" title="Nutcracker">Nutcracker</a></li> <li><a href="/wiki/Parser_cache" title="Parser cache">Parser cache</a></li> <li><a href="/wiki/Shellbox" title="Shellbox">Shellbox</a></li> <li><a href="/wiki/Redis" title="Redis">Redis</a></li></ul> </div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/MediaWiki_Engineering" title="MediaWiki Engineering">MediaWiki Engineering</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Upload.wikimedia.org" title="Upload.wikimedia.org">Multimedia</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Data_Engineering" class="mw-redirect" title="Data Engineering">Data Engineering</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Search" title="Search">Search</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/SRE/Data_Persistence/Documentation" title="SRE/Data Persistence/Documentation">SRE Data Persistence</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/SRE/Infrastructure_Foundations/Documentation" title="SRE/Infrastructure Foundations/Documentation">SRE Infra Foundations</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/SRE/Observability/Documentation" title="SRE/Observability/Documentation">SRE Observability</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Performance" title="Performance">Wikimedia Performance</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Event_Platform" title="Event Platform">Event Platform</a></p><p class="mw-empty-elt"> </p></div><div class="tpl-navsidebar-content"> <p class="tpl-navsidebar-heading"><a href="/wiki/Release_Engineering" title="Release Engineering">Release Engineering</a></p><p class="mw-empty-elt"> </p></div></div><p class="tpl-navsidebar-foot">[<span class="noprint plainlinks"><a class="external text" href="https://wikitech.wikimedia.org/w/index.php?title=Template:Navigation_Wikimedia_infrastructure&amp;action=edit"><span title="Edit this template">edit</span></a></span>]</p></div> <p>This page is about <b>Memcached for MediaWiki</b>. </p><p>This page is not about other Memcached clusters in production, such as those for <a href="/wiki/Thumbor" title="Thumbor">Thumbor</a>, <a href="/wiki/Help:Cloud_Services_introduction" title="Help:Cloud Services introduction">Wikimedia Cloud Services</a>, and <a href="/wiki/Swift" title="Swift">Swift</a>. </p> <figure typeof="mw:File/Thumb"><a href="/wiki/File:Wikipedia_Memcached_flow_2022.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/4/45/Wikipedia_Memcached_flow_2022.png/400px-Wikipedia_Memcached_flow_2022.png" decoding="async" width="400" height="285" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/45/Wikipedia_Memcached_flow_2022.png/600px-Wikipedia_Memcached_flow_2022.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/45/Wikipedia_Memcached_flow_2022.png/800px-Wikipedia_Memcached_flow_2022.png 2x" data-file-width="2224" data-file-height="1584"/></a><figcaption>MediaWiki's use of Memcached at WMF.</figcaption></figure> <meta property="mw:PageProp/toc"/> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Magic_numbers" data-mw-thread-id="h-Magic_numbers"><span data-mw-comment-start="" id="h-Magic_numbers"></span>Magic numbers<span data-mw-comment-end="h-Magic_numbers"></span></h2><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Magic_numbers","replies":[]}}--></div> <ul><li>WANCache (last updated: May 2020.) <ul><li>Tombstone (aka "hold-off TTL"): 11 seconds.</li> <li>Interim value: 1 second.</li></ul></li> <li>Mcrouter <ul><li>Gutter TTL: upto 10 minutes (<a rel="nofollow" class="external text" href="https://github.com/wikimedia/puppet/blob/9f9e389dac7830c7aabbf95803f51fd288cc6357/hieradata/role/common/mediawiki/appserver.yaml#L10">gutter_ttl</a>).</li> <li>On-host tier TTL: upto 10 seconds.</li></ul></li></ul> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="WANObjectCache" data-mw-thread-id="h-WANObjectCache"><span data-mw-comment-start="" id="h-WANObjectCache"></span>WANObjectCache<span data-mw-comment-end="h-WANObjectCache"></span></h2><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-WANObjectCache","replies":["h-High_level-WANObjectCache","h-Memcached_commands-WANObjectCache","h-Getting_revision\/page_from_WANCache_key-WANObjectCache"]}}--></div> <p><b>WANObjectCache</b> (or <b>WANCache</b>) is the primary interface in MediaWiki for interacting with Memcached and mcrouter. WANCache provides a developer-friendly API that naturally follow our best practices and transparently deals with the complex requirements of operating a platform of our scale. This includes preventing cache stampedes, avoiding cache misses for hot data through probabilistic and asynchronous regeneration prior to logical expiry, avoiding network congestion, supporting multiple versions of the software to run alongside each other (and apply purges to both, whilst storing values separately), avoiding cache polution during long-running processes or when databases are experiencing replication lag. The WANCache interface came out of the <a href="/wiki/Performance/Multi-DC_MediaWiki" title="Performance/Multi-DC MediaWiki">Multi-DC MediaWiki initiative</a> which required us to take these constraints more seriously, though they generally are not unique to Multi-DC and also significantly improved resilience and correctness during the 2015-2021 single-DC period. </p><p>WANCache builds on top of <b>BagOStuff</b>, which is the lower level key-value interface to Memcached and other storage backends. </p><p>See also: </p> <ul><li><a href="https://doc.wikimedia.org/mediawiki-core/master/php/classWANObjectCache.html#details" class="extiw" title="wmdoc:mediawiki-core/master/php/classWANObjectCache.html">WANObjectCache high-level documentation</a></li> <li><a href="https://gerrit.wikimedia.org/g/mediawiki/core/%2B/master/includes/libs/objectcache/README.md" class="extiw" title="git:mediawiki/core/+/master/includes/libs/objectcache/README.md">WANObjectCache metrics and internal details</a></li> <li><a href="https://www.mediawiki.org/wiki/Manual:Object_cache" class="extiw" title="mw:Manual:Object cache">mw:Manual:Object_cache</a>: what kind of data is stored here, how it gets there etc.</li></ul> <div class="mw-heading mw-heading3"><h3 id="High_level" data-mw-thread-id="h-High_level-WANObjectCache"><span data-mw-comment-start="" id="h-High_level-WANObjectCache"></span>High level<span data-mw-comment-end="h-High_level-WANObjectCache"></span></h3></div> <ul><li><b>Like a replica database.</b> There is generally no proactive setting of values during HTTP write actions. Instead, values are computed based on information from replica DBs, and computed on-demand using the <code>getWithSet(key, ttl, callable)</code> idiom. This means the application generally only expects cache values to be as up to date as a replica DB would be. Historically, it was common for MediaWiki to populate its cache during HTTP write actions instead. This meant that in a single-DC setup it could loosely be expected that the cache was as up-to-date as the master DB. As part of the multi-dc effort, this was changed starting in 2015, and thus its expectations were loosened to that of a replica DB.</li> <li><b>No synchronisation.</b> MediaWiki's WANCache layer does not require synchronisation of cached values across data centers. Instead, it considers each datacenter's Memcached cluster as independent. Each populating its own values as-needed on dc-local app servers from dc-local replica DBs.</li> <li><b>Tombstones (broadcasted purge)</b>. During HTTP write actions, MediaWiki asks WANCache to purge cache keys of which it has modified the source data. These purges take the form of short-lived Memcached keys known as "tombstones". We do not use the <code>DELETE</code> command because we want each data center to be able to populate its memcached independently, thus requiring no cross-dc master database connection, thus reading from a local replica, thus values ingested in the cache may be as stale as a replica can be. Implementing a Memcached purge as <code>DELETE</code> would mean both in the same DC and other DCs, the same key could be re-populated immediately with the same stale value we just deleted. Instead, WANCache formulates its purge as a <code>SET</code> operation that stores a placeholder value known as a "tombstone" (lasts for approx. 10 seconds for local and remote replica DBs to catch up).</li> <li><b>Interim values</b>. Upon seeing such tombstone, WANCache acts much like a cache miss, except that the newly computed value is not written back over the tombstone (as the computed value may be stale). Instead, to avoid a recompute stampede these maybe-stale values are stored as an "interim value" in a sister key which is only kept for a few seconds.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Memcached_commands" data-mw-thread-id="h-Memcached_commands-WANObjectCache"><span data-mw-comment-start="" id="h-Memcached_commands-WANObjectCache"></span>Memcached commands<span data-mw-comment-end="h-Memcached_commands-WANObjectCache"></span></h3></div> <p>Intra-dc: </p> <ul><li>Read traffic from the <code>getWithSet</code> idiom results in a <code>GETS</code> command (getMulti) that fetches the main key, plus any sister keys that might exist.</li> <li>Write trafffic from the <code>getWithSet</code> idiom results in either <code>ADD</code> if the key was known to be absent, or <code>Memcached->mergeViaCas</code> if a value existed but either required (or was elected for) regeneration.</li></ul> <p>Cross-dc: </p> <ul><li>Purge traffic uses the <code>/*/mw-wan/</code> prefix to tell mcrouter to broadcast this to other pools and clusters as well. The actual command is generally <code>SET</code> as it needs to induce a "hold-off" period using the tombstone (per the above). In rare cases where a hold-off is not needed (e.g. if the purge is not related to a DB write), then the broadcasted event will use <code>DELETE</code></li></ul> <div class="mw-heading mw-heading3"><h3 id="Getting_revision/page_from_WANCache_key" data-mw-thread-id="h-Getting_revision/page_from_WANCache_key-WANObjectCache"><span id="Getting_revision.2Fpage_from_WANCache_key"></span><span data-mw-comment-start="" id="h-Getting_revision/page_from_WANCache_key-WANObjectCache"></span>Getting revision/page from WANCache key<span data-mw-comment-end="h-Getting_revision/page_from_WANCache_key-WANObjectCache"></span></h3></div> <p>If you're trying to track down the specific revision text given an SqlBlobStore key, the somewhat convoluted procedure is documented at <a href="https://www.mediawiki.org/wiki/Manual:Caching#Revision_text" class="extiw" title="mw:Manual:Caching">mw:Manual:Caching#Revision_text</a>. </p> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Infrastructure" data-mw-thread-id="h-Infrastructure"><span data-mw-comment-start="" id="h-Infrastructure"></span>Infrastructure<span data-mw-comment-end="h-Infrastructure"></span></h2><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Infrastructure","replies":["h-Mcrouter-Infrastructure"]}}--></div> <p>There are two logical pools of memcached servers for MediaWiki: </p> <ul><li><b>Main</b>: The main pool for has 18 <a href="https://en.wikipedia.org/wiki/Shard_(database_architecture)" class="extiw" title="en:Shard (database architecture)">shards</a> and runs on the <code>mc10XX</code> hosts (in <a href="/wiki/Eqiad_cluster" class="mw-redirect" title="Eqiad cluster">Eqiad</a>) and <code>mc20XX</code> hosts (in <a href="/wiki/Codfw_cluster" class="mw-redirect" title="Codfw cluster">Codfw</a>).</li> <li><b>Gutter</b>: The gutter pool has 3 shards per DC, and hosted on <code>mc-gp100x</code> and <code>mc-gp200x</code> hosts (launch task: <a href="https://phabricator.wikimedia.org/T244852" class="extiw" title="phab:T244852">T244852</a>).</li></ul> <p>MediaWiki connects to memcached through a proxy called <b><a rel="nofollow" class="external text" href="https://github.com/facebook/mcrouter">mcrouter</a></b> which provides a number of benefits. </p> <div class="mw-heading mw-heading3"><h3 id="Mcrouter" data-mw-thread-id="h-Mcrouter-Infrastructure"><span data-mw-comment-start="" id="h-Mcrouter-Infrastructure"></span><a href="/wiki/Mw-mcrouter" title="Mw-mcrouter">Mcrouter</a><span data-mw-comment-end="h-Mcrouter-Infrastructure"></span></h3></div> <p>Each kubernetes node is running an instance of <a href="/wiki/Mw-mcrouter" title="Mw-mcrouter">mw-mcrouter</a>, the proxy that does: </p> <ul><li>consistent shards data across the memcached servers</li> <li>connection pooling</li> <li>failover to <code>gutter pool</code> in case of a server unavailability</li> <li>cross-dc replication via TLS <a href="https://phabricator.wikimedia.org/T271967" class="extiw" title="phab:T271967">T271967</a></li></ul> <p>Any mediawiki pod will have its memcached requests routed to the <a href="/wiki/Mw-mcrouter" title="Mw-mcrouter">mw-mcrouter</a> pod running on the same node. </p><p><b>Note: mw-wikifunctions is not using mw-mcrouter, but rather an in-pod mcrouter container.</b> </p> <div class="mw-heading mw-heading4"><h4 id="Mcrouter_Routes" data-mw-thread-id="h-Mcrouter_Routes-Mcrouter"><span data-mw-comment-start="" id="h-Mcrouter_Routes-Mcrouter"></span>Mcrouter Routes<span data-mw-comment-end="h-Mcrouter_Routes-Mcrouter"></span></h4></div> <p>Each MediaWiki api/appserver accesses memcached through its local Mcrouter instance <sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>. Mcrouter introduces the concepts of <a rel="nofollow" class="external text" href="https://github.com/facebook/mcrouter/wiki/Prefix-routing-setup">routes</a> and pools and each route applies consistent hashing on the key name to know where to send it, i.e. which of the 18 shards for memcached. </p><p>There are several routes available in our configuration, which are addressable via a route prefix that mcrouter <b>strips from the key</b> before forwarding the memcached command. </p> <ol><li><b>Main route</b>. This route is declared as <code>/$region/mw/</code> but is not addressed by MediaWiki as such. It routes to the dc-local "Main" pool shards. If a shard is perceived as unavailable from an appserver ("TKO") the local mcrouter forwards all commands (incl gets, sets, and locks) to a shard of the "Gutter" pool instead (launch task: <a href="https://phabricator.wikimedia.org/T244852" class="extiw" title="phab:T244852">T244852</a>). <ul><li>This route is used by the majority of traffic, through <code>WANObjectCache::getWithSet</code> calls in MediaWiki.</li> <li>MediaWiki doesn't use the <code>/$region/mw/</code> prefix. Instead <code>/$region/mw/</code> is the default route and MediaWiki sends these commands without any routing prefix.</li> <li>Switchover to and from the gutterpool is decided by Mcrouter locally (per-appserver), it is not centrally coordinated. The keys stored in a gutter server have a reduced TTL.</li></ul></li> <li><b>WAN route</b>. This route is declared as <code>/$region/mw-wan/</code>. It routes to the dc-local "Main" pool shards as well as the "Proxies" for all non-local DCs. <ul><li>This route is for internal use by MediaWiki's WANObjectCache to broadcast its purges ("tombstones"). This happens from calls to <code>WANObjectCache::purge</code> (invalidates a single key) or <code>WANObjectCache::touchCheckKey</code> (effectively invalidate many keys, through a shared "check" key; somewhat like the Varnish <a href="/wiki/XKey" title="XKey">XKey</a> mechanism).</li> <li>This route is not used for storing "regular" values is not exposed to any generic <code>WANObjectCache::getWithSet</code> or <code>BagOStuff</code> calls.</li></ul></li></ol> <div class="mw-heading mw-heading4"><h4 id="Example" data-mw-thread-id="h-Example-Mcrouter"><span data-mw-comment-start="" id="h-Example-Mcrouter"></span>Example<span data-mw-comment-end="h-Example-Mcrouter"></span></h4></div><p> The memcached key <code>WANCache:v:metawiki:translate-groups</code> (belongs to the <a href="https://www.mediawiki.org/wiki/Extension:Translate" class="extiw" title="mw:Extension:Translate">Translate extension</a>) is formatted by the WANCache library. When Translate wants to get the value of this key, WANCache will send a <code>GET</code> command from MediaWiki to <code>localhost:11213</code>, where mcrouter is listening. The command is then further routed to <code>mc1022</code> (based on key hashing). MediaWiki it totally ignorant about the <code>mc[1,2]0XX</code> host, it only knows about sending commands to a localhost port. A mcrouter admin command helps figure out where keys are hashed/routed to:</p><div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>elukey@mw1345:~$<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"get __mcrouter__.route(get,WANCache:v:metawiki:translate-groups)"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>nc<span class="w"> </span>localhost<span class="w"> </span><span class="m">11213</span><span class="w"> </span>-q<span class="w"> </span><span class="m">2</span> VALUE<span class="w"> </span>__mcrouter__.route<span class="o">(</span>get,WANCache:v:metawiki:translate-groups<span class="o">)</span><span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="m">16</span> <span class="m">10</span>.64.0.83:11211 END elukey@mw1345:~$<span class="w"> </span>dig<span class="w"> </span>-x<span class="w"> </span><span class="m">10</span>.64.0.83<span class="w"> </span>+short mc1022.eqiad.wmnet. </pre></div><p>Some things to notice: </p><ul><li>The special prefix <code>__mcrouter__.route</code> is intercepted by mcrouter. These are admin commands, for which proxy returns directly without contacting the memcached hosts. This function returns the target of the consistent hashing of the key name.</li> <li>Mcrouter listens on port 11213 on all MediaWiki <a href="/wiki/Application_servers" title="Application servers">app servers</a>, meanwhile on every <code>mc10XX</code> host memcached listens on port 11211.</li></ul><p> To get a key and dump it to a file it is sufficient to:</p><div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>elukey@mw1345:~$<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"get WANCache:v:metawiki:translate-groups"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>nc<span class="w"> </span>localhost<span class="w"> </span><span class="m">11213</span><span class="w"> </span>-q<span class="w"> </span><span class="m">2</span><span class="w"> </span>><span class="w"> </span>dump.txt elukey@mw1345:~$<span class="w"> </span>du<span class="w"> </span>-hs<span class="w"> </span>dump.txt 380K<span class="w"> </span>dump.txt </pre></div><p>In this case the key's value is pretty big, and it needs PHP to be interpreted correctly (to unserialize it), but nonetheless we got some useful information (like the size of the key). This could be useful when it is necessary to quickly get how big a key is, rather than knowing its content. </p><div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Servers" data-mw-thread-id="h-Servers"><span data-mw-comment-start="" id="h-Servers"></span>Servers<span data-mw-comment-end="h-Servers"></span></h2><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Servers","replies":[]}}--></div> <p>Servers list can be found in <a href="https://gerrit.wikimedia.org/r/plugins/gitiles/operations/puppet/%2B/refs/heads/production/hieradata/common/profile/mediawiki/mcrouter_wancache.yaml" class="extiw" title="gerrit:plugins/gitiles/operations/puppet/+/refs/heads/production/hieradata/common/profile/mediawiki/mcrouter wancache.yaml">puppet</a>. This list is passed to <a href="/wiki/Mw-mcrouter" title="Mw-mcrouter">mw-mcrouter</a> after being parsed by some <a href="https://gerrit.wikimedia.org/r/plugins/gitiles/operations/puppet/%2B/refs/heads/production/modules/mediawiki/manifests/mcrouter/yaml_defs.pp" class="extiw" title="gerrit:plugins/gitiles/operations/puppet/+/refs/heads/production/modules/mediawiki/manifests/mcrouter/yaml defs.pp">wonderful code</a> </p> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Runbooks" data-mw-thread-id="h-Runbooks"><span data-mw-comment-start="" id="h-Runbooks"></span>Runbooks<span data-mw-comment-end="h-Runbooks"></span></h2><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Runbooks","replies":[]}}--></div> <ul><li><a href="/wiki/Memcached_for_MediaWiki/Memcached_server_failure" class="mw-redirect" title="Memcached for MediaWiki/Memcached server failure">Memcached server failure</a></li> <li><a href="/wiki/Performance/Runbooks/Analyze_memcached" title="Performance/Runbooks/Analyze memcached">Performance/Runbooks/Analyze memcached</a> (How to use memkeys or cachedump)</li></ul> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Dashboards" data-mw-thread-id="h-Dashboards"><span data-mw-comment-start="" id="h-Dashboards"></span>Dashboards<span data-mw-comment-end="h-Dashboards"></span></h2><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Dashboards","replies":[]}}--></div> <ul><li><a class="external text" href="https://grafana-rw.wikimedia.org/d/ltSHWhHIk/mcrouter-on-k8s">Mcrouter-on-k8s</a></li> <li><a class="external text" href="https://logstash.wikimedia.org/app/dashboards#/view/memcached?_g=(filters%3A!()%2CrefreshInterval%3A(pause%3A!t%2Cvalue%3A0)%2Ctime%3A(from%3Anow-3h%2Cto%3Anow))">mw-memcached errors</a></li> <li><a class="external text" href="https://grafana-rw.wikimedia.org/d/000000316/memcache">Memcached Dashboard</a></li> <li><a class="external text" href="https://grafana-rw.wikimedia.org/d/000000316/memcache?orgId=1&amp;var-datasource=eqiad%20prometheus%2Fops&amp;var-cluster=memcached_gutter&amp;var-instance=All">Memcached Gutterpool status</a></li></ul> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Links" data-mw-thread-id="h-Links"><span data-mw-comment-start="" id="h-Links"></span>Links<span data-mw-comment-end="h-Links"></span></h2><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Links","replies":[]}}--></div> <ul><li><a href="https://gerrit.wikimedia.org/r/plugins/gitiles/operations/docker-images/production-images/%2B/refs/heads/master/images/mcrouter/" class="extiw" title="gerrit:plugins/gitiles/operations/docker-images/production-images/+/refs/heads/master/images/mcrouter/">mcrouter image</a></li> <li><a href="https://gerrit.wikimedia.org/r/plugins/gitiles/operations/puppet/%2B/refs/heads/production/hieradata/role/common/deployment_server/kubernetes.yaml" class="extiw" title="gerrit:plugins/gitiles/operations/puppet/+/refs/heads/production/hieradata/role/common/deployment server/kubernetes.yaml">mcrouter image versions</a></li> <li><a href="https://gerrit.wikimedia.org/r/plugins/gitiles/operations/puppet/%2B/refs/heads/production/hieradata/common/profile/mediawiki/mcrouter_wancache.yaml" class="extiw" title="gerrit:plugins/gitiles/operations/puppet/+/refs/heads/production/hieradata/common/profile/mediawiki/mcrouter wancache.yaml">list of mediawiki memcached production servers</a></li></ul> <ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://engineering.fb.com/web/introducing-mcrouter-a-memcached-protocol-router-for-scaling-memcached-deployments/">Introducing mcrouter: A memcached protocol router for scaling memcached deployments</a></span> </li> </ol> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐qvkwc Cached time: 20241122204817 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] DiscussionTools time usage: 0.018 seconds CPU time usage: 0.075 seconds Real time usage: 0.086 seconds Preprocessor visited node count: 432/1000000 Post‐expand include size: 9352/2097152 bytes Template argument size: 2542/2097152 bytes Highest expansion depth: 8/100 Expensive parser function count: 2/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 4150/5000000 bytes --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 33.271 1 -total 100.00% 33.271 1 Template:Navigation_Wikimedia_infrastructure 51.40% 17.100 1 Template:Navigation_sidebar --> <!-- Saved in parser cache with key labswiki:pcache:idhash:3214-0!canonical and timestamp 20241122204817 and revision id 2246531. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://wikitech.wikimedia.org/w/index.php?title=Memcached_for_MediaWiki&amp;oldid=2246531">https://wikitech.wikimedia.org/w/index.php?title=Memcached_for_MediaWiki&amp;oldid=2246531</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Special:Categories" title="Special:Categories">Categories</a>: <ul><li><a href="/wiki/Category:How-To" title="Category:How-To">How-To</a></li><li><a href="/wiki/Category:Caching" title="Category:Caching">Caching</a></li><li><a href="/wiki/Category:MediaWiki_production" title="Category:MediaWiki production">MediaWiki production</a></li><li><a href="/wiki/Category:SRE_Service_Operations" title="Category:SRE Service Operations">SRE Service Operations</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 21 November 2024, at 16:42.</li> <li id="footer-info-copyright">Text is available under the <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-ShareAlike License</a>; additional terms may apply. See <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">Terms of Use</a> for details.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Main_Page">About Wikitech</a></li> <li id="footer-places-disclaimers"><a href="https://foundation.wikimedia.org/wiki/General_disclaimer">Disclaimers</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/wikitech.wikimedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//wikitech.wikimedia.org/w/index.php?title=Memcached_for_MediaWiki&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-dg26b","wgBackendResponseTime":102,"wgDiscussionToolsPageThreads":[{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Magic_numbers","replies":[]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-WANObjectCache","replies":[{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-High_level-WANObjectCache","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Memcached_commands-WANObjectCache","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Getting_revision/page_from_WANCache_key-WANObjectCache","replies":[]}]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Infrastructure","replies":[{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Mcrouter-Infrastructure","replies":[{"headingLevel":4,"name":"h-","type":"heading","level":0,"id":"h-Mcrouter_Routes-Mcrouter","replies":[]},{"headingLevel":4,"name":"h-","type":"heading","level":0,"id":"h-Example-Mcrouter","replies":[]}]}]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Servers","replies":[]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Runbooks","replies":[]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Dashboards","replies":[]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Links","replies":[]}],"wgPageParseReport":{"discussiontools":{"limitreport-timeusage":"0.018"},"limitreport":{"cputime":"0.075","walltime":"0.086","ppvisitednodes":{"value":432,"limit":1000000},"postexpandincludesize":{"value":9352,"limit":2097152},"templateargumentsize":{"value":2542,"limit":2097152},"expansiondepth":{"value":8,"limit":100},"expensivefunctioncount":{"value":2,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":4150,"limit":5000000},"timingprofile":["100.00% 33.271 1 -total","100.00% 33.271 1 Template:Navigation_Wikimedia_infrastructure"," 51.40% 17.100 1 Template:Navigation_sidebar"]},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-qvkwc","timestamp":"20241122204817","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10