Page cache rješava 95% problema brzine, ali kad ima logged-in korisnika i dinamičkog sadržaja, page cache miss-a. Object cache rješava taj sloj — sprema rezultate database queryja u RAM, pa svaki put kad WordPress hoće isto pitanje, odgovor je instant. Ovo je vodič koji koristit i kako postaviti.
Što je object cache
U normalnom radu, svaki PHP request rade DB queryje: "daj mi sve user_meta za usera 5", "daj mi opciju 'siteurl'", "daj mi term-ove za kategoriju". WordPress core radi 50-200 DB queryja po request-u.
Object cache pamti rezultate tih queryja u memoriji. Drugi request za isti query → vrati iz RAM-a, ne dira DB.
Rezultati: 30-70% manje DB queryja, 20-50% brža response time za dynamic stranice.
Redis
Najmoderniji choice. In-memory key-value store s puno features.
Plus:
- Persistence — može save state na disk pa preživi reboot.
- Data structures — strings, lists, hashes, sorted sets (više od običnog key-value).
- Pub/Sub — za real-time apps.
- Cluster mode za scaling.
- Idealno i kao queue backend (Laravel queue, Sidekiq).
- Aktivan development, najbrža evolucija features.
Cijena: open-source besplatan. RAM trošak na serveru.
Memcached
Starija, jednostavnija opcija. Pure in-memory cache.
Plus:
- Vrlo jednostavan, malo memory overhead-a.
- Multi-threaded (Redis je single-threaded — manje važno na malim serverima).
- Stabilan, godinama u produkciji.
Minus:
- Samo string values (Redis ima više data types).
- Nema persistence — restart = sve nestane.
- Manje features (nema pub/sub, nema sorted sets).
- Manje aktivan development.
Usporedba ukratko
| Feature | Redis | Memcached |
|---|---|---|
| Brzina | vrlo brza | vrlo brza |
| Data types | mnogi | string only |
| Persistence | da (opcionalno) | ne |
| Pub/Sub | da | ne |
| Cluster | built-in | klijent-side |
| Multi-thread | od 6.x | da, od 2009 |
| Queue backend | odlično | ne |
| Memory efficiency | dobra | vrlo dobra |
Naša preporuka: Redis za 99% slučajeva. Memcached samo ako već imaš infrastrukturu ili specifičan razlog.
Setup Redis na cPanel/CloudLinux serveru
- Server admin instalira
redisiphp-redisekstenziju:yum install redis php-redis # RHEL/Alma systemctl enable --now redis - Provjeri da je instaliran:
redis-cli ping→ "PONG". - Postavi
/etc/redis.conf:
LRU policy = kad RAM pun, briše najmanje korištene ključeve.bind 127.0.0.1 maxmemory 512mb maxmemory-policy allkeys-lru - Restart:
systemctl restart redis. - U PHP:
php -m | grep redisda bi se uvjerio da je modul učitan.
WordPress Redis object cache
Plugin: Redis Object Cache (Till Krüss)
Najbolji free plugin. Aktiviraš, klikneš "Enable Object Cache" → gotovo.
// wp-config.php
define('WP_CACHE', true);
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'optional');
define('WP_REDIS_PREFIX', 'wpsite1_'); // važno ako više sajtova dijeli Redis
Plugin pokazuje statistiku: hit rate, queries, memory used.
Object Cache Pro (paid)
Premium verzija (od ~95 USD/god) — bolji performance, multi-tenant analytics, async replication.
WooCommerce + Redis
WC ima posebno zahtjevan database load. Redis object cache + page cache (s ESI ili fragment cache za cart) je standard za production WC.
WC-specific tips:
- Cache mora preskočit AJAX update-cart endpointe — ne cache-aj live cart.
- Transients za product queries dramatično ubrzavaju shop page.
- Coupon validation u admin-u je notoriozno spor, transients pomažu.
Laravel + Redis
Laravel iz boxa podržava Redis kao cache driver, session driver, queue driver, broadcast driver. Highly recommended.
# .env
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
Kod:
Cache::remember('expensive.query', 3600, fn() =>
User::with('orders')->active()->get()
);
Prvi poziv DB query, sljedećih sat vremena cache hit.
Cache invalidation
"There are only two hard things in Computer Science: cache invalidation and naming things."
Strategije:
- TTL (Time To Live) — stavi expiry, npr. 1h. Cache se sam izbriše. Najjednostavnije.
- Event-based invalidation — kad podatak promijeni (npr. post update), invalidiraj sve cacheve koji ga sadrže. Komplicirano, ali precizno.
- Cache tagging — group cacheve po tag-u, briši cijeli tag odjednom. Redis + Laravel podržavaju.
- Versioning — uključi version u cache key (npr.
users:v2:list), bump version pri schema change-u, stari cache se ne dira ali nikad više ne čita.
Što NE caches
- User-specific session data — cache po user_id, ne global.
- Real-time data (live chat, stock, presence).
- Sigurnosne provjere (npr. is_admin) — ne cache-aj rezultat permission check-a osim s vrlo kratkim TTL.
- Form CSRF tokene.
Monitoring
redis-cli info stats— hit rate, evicted keys, total connections.redis-cli --bigkeys— pronađi velike ključeve koji jedu memoriju.- Grafana Redis dashboard — vizualno praćenje.
- WP Redis Object Cache plugin pokazuje per-request hit rate.
Target hit rate: 80%+. Manje znači da cache strategija nije OK ili memory limit prenizak (evicted keys).
Memory sizing
Realna procjena:
- Mali blog (1000 visits/dan): 64MB Redis.
- Mid WP sajt: 256MB.
- WooCommerce 1000 products: 512MB.
- Veliki WC 10k products: 1-2GB.
- Multi-tenant SaaS: 2GB+ + cluster.
Multi-site na istom serveru — namespace
Ako 5 sajtova dijeli Redis instance, koristi WP_REDIS_PREFIX različit za svaki. Inače će se cacheve preklapat.
Alternativa: databases u Redis (0-15), svaki sajt na svom DB:
define('WP_REDIS_DATABASE', 1); // sajt 1
define('WP_REDIS_DATABASE', 2); // sajt 2
Pitfalls
- Redis ostane bez memory: postavi
maxmemory-policy allkeys-lru, nenoeviction. - Redis exposed na public IP: NIKAD — bind na 127.0.0.1, ili requirepass.
- Persistence usporava write: RDB snapshots OK, AOF (append-only file) može usporit za high-write. Za object cache disable persistence (cache nije critical data).
- Stale cache: ako update bypasses cache invalidation logic, stari podatak ostaje. Defensive TTL pomaže.
- Slow command blocks Redis:
KEYS *blokira sve. KoristiSCANili pripreme za pattern.
WMD i Redis
Sav WMD managed VPS i dedicated hosting dolazi s Redis-om predinstaliranim, optimizirano za WP/WC/Laravel workload (LRU policy, no persistence za cache, 256MB-1GB allocation ovisno o paketu). Za shared hosting klijente nudimo Redis as a service per-account na zahtjev. Plugin instalacija + config + monitoring uključeni u Maintenance Plan. Za multi-site klijente postavljamo namespace ili dedicated database po sajtu.
FAQ
Redis ili Memcached za WordPress? Redis. Bolje features, isto brzina, isti setup overhead.
Treba li Redis ako koristim page cache? Page cache pokriva anonimne posjete. Object cache pokriva logged-in users i checkout. Webshop bez object cache-a → spori checkout.
Redis na shared hosting? Ovisi o providera. WMD ima Redis na shared planovima. Mnogi shared hostovi nemaju ga.
Što ako Redis padne? WordPress automatski fallback na DB queries. Sajt radi, samo sporije. Ne padne sajt kad Redis padne.
Mogu li jedan Redis koristit za cache + queue + session? Da, ali bolje različite databases (0=cache, 1=queue, 2=session) za isolation. Ako kvariš jednog, ne kvariš drugog.
Trebaš Redis setup ili migraciju? WMD instalira, konfigurira i monitora Redis za WP/WC/Laravel klijente. Javi se preko kontakt forme.