<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Caching on Johnny Metz</title>
    <link>https://dev.johnnymetz.com/tags/caching/</link>
    <description>Recent content in Caching on Johnny Metz</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sun, 25 Oct 2026 12:00:00 -0400</lastBuildDate>
    <atom:link href="https://dev.johnnymetz.com/tags/caching/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Caching at Scale in Django: Lessons from Production</title>
      <link>https://dev.johnnymetz.com/posts/caching-at-scale-in-django/</link>
      <pubDate>Sun, 25 Oct 2026 12:00:00 -0400</pubDate>
      <guid>https://dev.johnnymetz.com/posts/caching-at-scale-in-django/</guid>
      <description>&lt;p&gt;My team runs a multi-tenant Django API that serves browser extensions. Traffic arrives in waves: a company&amp;rsquo;s employees all log on in the same minute, or a customer pushes an update to every user at once. Traffic grew about 20x in two years. The API peaks around 1,100 requests per second on a typical weekday. The busiest moment we have seen, a large customer pushing an update to all of its users at once, hit 2,000. Postgres sees about 0.3 queries per request. Redis serves the rest at a 97% hit rate. Caching was the biggest lever, and here is what we learned.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
