FindNChoose is reader-supported. Some links may earn us a commission at no cost to you; it never changes our verdicts. How we make money · How we test
How we tested
We measured this WordPress site on our own Hostinger KVM 4 VPS (4 vCPU, 16 GB RAM, Ubuntu 24.04, CloudPanel, nginx, PHP 8.3 FPM, Percona MySQL 8.4, Redis) on October 31, 2026. The stack is GeneratePress with a child theme, Rank Math, Contact Form 7, Cache Enabler for page caching and Redis Object Cache.
We ran two sets of tests. Throughput: ApacheBench on the server at five concurrent connections, 500 cached and 200 uncached homepage requests, before launch on the staging address. Live response time: after launch, 20 cached and 10 uncached requests per page from the server itself, with each request opening a new HTTPS connection, at low priority while the server load was 0.04. Uncached requests added a random query string, which Cache Enabler does not serve from cache. We counted database queries by rendering the same page with the Redis object cache on and then disabled for a single process. Running tests on the server removes network distance, so these numbers show what caching changes on the server, not what a visitor far away will see.
The results of our WordPress caching VPS test
| Page | Cached (median) | Uncached (median) | Difference |
|---|---|---|---|
| Homepage | 32 ms | 95 ms | About 3x faster |
| A long review article | 25 ms | 99 ms | About 4x faster |
| Calculator page | 23 ms | 92 ms | About 4x faster |
Time to first byte, including a new TLS handshake for every request, measured on the server on October 31, 2026.
| Throughput test (homepage) | Requests per second | Median time per request |
|---|---|---|
| With page cache | 678 | 7 ms |
| Without page cache (Redis still on) | 71 | 65 ms |
ApacheBench, five concurrent connections, staging address, October 31, 2026. Median 7 ms vs 65 ms is about 9x faster.
| Uncached render of one article | Database queries | Peak PHP memory |
|---|---|---|
| Redis object cache on | 1 | 12.0 MB |
| Redis object cache off | 51 | 12.0 MB |
Same page, same code, rendered on the server on October 31, 2026.
What the numbers mean
The two test sets used different tools and conditions, which is why the cached numbers differ (7 ms vs 23 to 32 ms). ApacheBench ran before launch on the staging address under steady load, while our live test used curl and opened a fresh HTTPS connection for every request, so each number includes a TLS handshake. Compare numbers within each table, not across them. Both point the same way: a cached page is mostly the cost of reading a file and sending it, while an uncached page means running PHP, WordPress, the theme and every plugin.
The query count shows why Redis matters. Without an object cache, WordPress asked MySQL 51 questions to build one article; with Redis it asked 1, because options, menus, terms and post data were already in memory. That does not show up as a big speed difference on a quiet server with a fast local database, but it is what keeps MySQL calm when many uncached requests arrive at once, for example from logged-in users or search.
Memory was the same either way at 12 MB per render. Caching saves CPU time and database work, not PHP memory. For memory sizing, see how much RAM WordPress needs.
The three layers of WordPress caching on a VPS
| Layer | What it stores | Who benefits | What we use |
|---|---|---|---|
| Page cache | The finished HTML of each page | Anonymous visitors (most traffic) | Cache Enabler |
| Object cache | Results of database queries and WordPress objects | Every uncached request: logged-in users, admin, search, cache misses | Redis Object Cache |
| PHP opcode cache | Compiled PHP code | Every PHP request | OPcache (on by default in PHP 8.3) |
A CDN can add a fourth layer by serving files from servers near your visitors. It helps most when your audience is far from your server.
How we set it up
1. Page cache
We use Cache Enabler, a lightweight plugin that writes each page to a static HTML file and serves it to visitors who are not logged in. You can confirm a page came from the cache with the response header x-cache-handler: cache-enabler-engine. Cache Enabler clears cached pages when content is published or updated, and we also clear it after each deploy. Other good choices are LiteSpeed Cache (if your server runs LiteSpeed), WP Super Cache or nginx’s FastCGI cache.
2. Redis object cache
- Install Redis on the server if it is not already there (on Ubuntu, the
redis-serverpackage). - Install the Redis Object Cache plugin.
- In
wp-config.php, give each site its own Redis database number and a unique key prefix if several sites share the server. We setWP_REDIS_DATABASEandWP_REDIS_PREFIXfor this reason. - Enable it:
wp redis enable, then checkwp redis statussays “Connected”.
3. PHP-FPM and OPcache
OPcache is enabled by default in PHP 8.3, so make sure it has not been switched off. We run PHP-FPM with an on-demand pool, which starts workers only when needed and frees memory when the site is quiet. On a server that hosts several sites, this keeps one busy site from holding memory the others need.
Shared hosting vs a VPS for caching
Good shared hosts cache for you. In our Hostinger review, we measured Hostinger’s shared hosting from our VPS in Boston: cached pages answered in 0.36 to 0.40 seconds, including about 0.25 seconds of network distance, and uncached pages took 0.20 to 0.31 seconds longer. Those tests include the network, so they are not directly comparable with the on-server numbers above, but the pattern is the same: the cache is what makes WordPress fast. On a VPS, you are the one who has to set it up. See shared hosting vs VPS for the full trade-off, and the VPS sizing calculator to choose a plan.
Common caching mistakes
- Caching pages for logged-in users or carts. Page caches should skip them; most plugins do by default.
- Stacking two page caches (for example, a plugin cache and a server cache) without understanding which one is serving the page. Clearing one leaves the other stale.
- Sharing a Redis database between sites without a prefix, so one site can read or flush another’s cache.
- Not clearing the cache after a design change, so visitors see old CSS.
- Measuring only the homepage. Test a long article and a page with forms too.
Frequently asked questions
Yes. Unlike most shared hosts, a VPS does not cache WordPress for you. In our test, a page cache made pages 3 to 9 times faster and raised throughput from 71 to 678 requests per second.Do I need caching on a VPS?
A page cache stores the finished HTML and serves it to visitors who are not logged in. An object cache, such as Redis, stores database results so pages that cannot be served from the page cache need fewer queries. In our test, Redis cut queries on one uncached article from 51 to 1.What is the difference between a page cache and an object cache?
It is cheap to run, since Redis used about 14 MB on our server, and it reduces database load for logged-in users, the admin and cache misses. On a small, mostly anonymous site, the page cache does most of the work, but Redis is still worth enabling on a VPS.Is Redis worth it for a small WordPress site?
On nginx, a lightweight page cache such as Cache Enabler or WP Super Cache, plus Redis Object Cache, works well. On a LiteSpeed server, LiteSpeed Cache is the natural choice.Which caching plugin is best on a VPS?
Indirectly. Faster responses improve page experience and make it easier for search engines to crawl your site, but caching does not replace good content.Does caching help SEO?