{
  "id": "bbg-p0097-caching-and-rate-limiting-caching",
  "title": "Redis and Memcached Cache Tradeoffs",
  "chapter": "caching-and-rate-limiting",
  "batch": "21",
  "rank": 204,
  "sourcePage": 97,
  "sourcePointer": "p. 97",
  "status": "accepted",
  "reviewerStatus": "reviewed",
  "fidelityScore": 0.9,
  "canvas": {
    "width": 960,
    "height": 640
  },
  "fireworksTechGraph": {
    "style": "style-1-flat-icon",
    "diagramType": "comparison",
    "topologyNotes": [
      "source page render inspected",
      "extracted page text inspected",
      "source page render inspected",
      "preserve comparison structure: Memcached as simple volatile string cache, Redis as data-structure cache with hashes, sorted sets, bitmaps, and optional durability patterns",
      "omit product logos, source table styling, and copied table prose"
    ],
    "publicBoundary": [
      "original vector output",
      "no source pixels",
      "no source mark or long wording"
    ]
  },
  "callouts": [],
  "sourceReview": {
    "conceptAnchors": [
      "concept: Redis vs Memcached",
      "concept: simple string cache",
      "concept: hashes, sorted sets, and bitmaps",
      "concept: user behavior history and deduping",
      "concept: cache choice by data structure need"
    ],
    "labelSource": "curated",
    "semanticStatus": "reviewed"
  },
  "groups": [
    {
      "id": "memcached",
      "label": "Memcached fit",
      "x": 62,
      "y": 126,
      "w": 336,
      "h": 280
    },
    {
      "id": "redis",
      "label": "Redis fit",
      "x": 510,
      "y": 126,
      "w": 336,
      "h": 280
    }
  ],
  "shapes": [
    {
      "id": "mem",
      "kind": "table",
      "label": "Memcached",
      "detail": "simple KV",
      "x": 124,
      "y": 166,
      "w": 178,
      "h": 126,
      "tone": "blue"
    },
    {
      "id": "memfit",
      "kind": "rect",
      "label": "Volatile cache",
      "detail": "fast strings",
      "x": 146,
      "y": 320,
      "w": 134,
      "h": 54,
      "tone": "teal"
    },
    {
      "id": "redis",
      "kind": "table",
      "label": "Redis",
      "detail": "data structures",
      "x": 588,
      "y": 150,
      "w": 178,
      "h": 126,
      "tone": "red"
    },
    {
      "id": "hash",
      "kind": "rect",
      "label": "Hash",
      "detail": "counts fields",
      "x": 520,
      "y": 320,
      "w": 98,
      "h": 54,
      "tone": "green"
    },
    {
      "id": "zset",
      "kind": "rect",
      "label": "Sorted set",
      "detail": "rank dedupe",
      "x": 640,
      "y": 320,
      "w": 98,
      "h": 54,
      "tone": "purple"
    },
    {
      "id": "bitmap",
      "kind": "rect",
      "label": "Bitmap",
      "detail": "large booleans",
      "x": 760,
      "y": 320,
      "w": 98,
      "h": 54,
      "tone": "orange"
    },
    {
      "id": "choice",
      "kind": "diamond",
      "label": "Choose",
      "detail": "shape need",
      "x": 390,
      "y": 440,
      "w": 134,
      "h": 84,
      "tone": "gray"
    }
  ],
  "connectors": [
    {
      "from": "mem",
      "to": "memfit",
      "label": "cache",
      "flow": "main"
    },
    {
      "from": "redis",
      "to": "hash",
      "label": "counts",
      "flow": "data"
    },
    {
      "from": "redis",
      "to": "zset",
      "label": "rank",
      "flow": "data"
    },
    {
      "from": "redis",
      "to": "bitmap",
      "label": "flags",
      "flow": "data"
    },
    {
      "from": "memfit",
      "to": "choice",
      "label": "simple",
      "flow": "main"
    },
    {
      "from": "hash",
      "to": "choice",
      "label": "structure",
      "flow": "control"
    },
    {
      "from": "zset",
      "to": "choice",
      "label": "order",
      "flow": "control"
    },
    {
      "from": "bitmap",
      "to": "choice",
      "label": "compact",
      "flow": "control"
    }
  ]
}
