June 3, 2026
9 min read
Scalability in Strapi: Patterns for Projects That Grow Beyond the MVP
What limits Strapi performance at scale and how to address it: database, Redis caching, clustering, and query optimization.
Leer en espanolWhen the default Strapi setup starts showing its limits
A Strapi installation with SQLite and no caching works well for development and low-traffic MVPs. The first limit symptoms appear when content volume exceeds a few thousand records, when API traffic grows to hundreds of requests per minute, or when multiple processes need to access the same state.
SQLite is the first real limit: it only allows one writer at a time and does not support multiple Strapi process instances accessing the same file. For any environment beyond local development, PostgreSQL is the correct database.
Database: PostgreSQL and connection pool configuration
With PostgreSQL, the next limit is usually the connection pool. If hosting scales horizontally with multiple Strapi instances, each opens its own pool. Without a connection proxy like PgBouncer, the database can be saturated with idle connections before being saturated with actual load.
Indexes are the most impactful database optimization. By default, Strapi indexes fields used for relationships and basic filters. If your API queries use frequent custom filters — by date, status, or text field — adding indexes on those columns can reduce query time from seconds to milliseconds.
Response caching with Redis
The REST cache plugin for Strapi allows caching Content API responses in Redis. For content that changes rarely and is queried often — categories, site configuration, marketing pages — the cache eliminates most database queries.
Cache invalidation is the critical point. When a record is updated from the Strapi admin, the cache for those resources is invalidated automatically for configured collections. If there is external update logic — scripts, importers, webhooks — the cache must be invalidated manually.
Configuring the REST cache plugin with Redis in Strapi.
// config/plugins.js
module.exports = {
'rest-cache': {
config: {
provider: {
name: 'redis',
options: {
socket: {
host: process.env.REDIS_HOST ?? '127.0.0.1',
port: 6379,
},
},
},
strategy: {
keysPrefix: 'strapi',
maxAge: 3_600_000,
contentTypes: [
{ singularName: 'article' },
{ singularName: 'category' },
{ singularName: 'navigation' },
],
},
},
},
}; Clustering and horizontal scaling
Strapi supports multiple parallel instances, but the admin panel assets must be accessible to all processes. In multi-instance environments, those assets must be served from a shared volume or a CDN, not from each instance local filesystem.
For most projects growing beyond the MVP, the correct sequence is: PostgreSQL first, then Redis for response caching, then index tuning, and only then clustering if volume justifies it. Skipping earlier steps and going straight to clustering adds complexity without resolving the actual bottleneck.
More articles
Back to articlesPayment Platforms in Mexico: Stripe, Conekta, Mercado Pago, and OpenPay
A technical and commercial comparison of the four most-used payment platforms for digital projects in Mexico.
June 3, 2026
7 min read
Shipping Platforms in Mexico: Skydropx, EnviosPerros, Pakke, and Enviame
How to choose between the main shipping aggregators for ecommerce in Mexico based on your volume, operations, and technical needs.
June 3, 2026
7 min read
Headless CMS in 2026: PayloadCMS, Strapi, Sanity, and Directus
Which headless CMS to choose based on project type, the level of technical control you need, and how you plan to model your content.
June 3, 2026
8 min read