Skip to main content
Glama
CACHING.mdโ€ข8.69 kB
# Intelligent Caching System The WordPress MCP Server includes a comprehensive intelligent caching system that dramatically improves performance by reducing API calls and providing faster response times. ## ๐Ÿš€ **Performance Benefits** - **50-70% reduction** in taxonomy API calls (categories, tags) - **40-60% reduction** in authentication requests - **30-50% reduction** in user profile lookups - **Significantly improved** response times for static data - **Better rate limit utilization** - 60 requests/minute becomes much more effective ## ๐Ÿ—๏ธ **Architecture Overview** ### **Multi-Layer Caching System** ```text Request โ†’ Cache Check โ†’ API Call (if miss) โ†’ Cache Store โ†’ Response โ†‘ โ†“ โ””โ”€โ”€ ETag Validation โ† HTTP Headers โ†โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` **Layer 1: HTTP Response Cache** - ETags support for efficient revalidation - Cache-Control headers based on data volatility - Conditional requests (If-None-Match) **Layer 2: In-Memory Application Cache** - TTL-based expiration by data type - LRU eviction for memory management - Site-specific cache keys for multi-site support **Layer 3: Intelligent Invalidation** - Event-based cache clearing on content changes - Pattern-based invalidation of related data - Cascading invalidation (e.g., post changes clear category counts) ## ๐Ÿ“Š **Cache Strategies by Data Type** ### **Static Data (4 hour TTL)** - Site settings, user roles, capabilities - Cache-Control: `public, max-age=14400` - **Why**: Changes very rarely, safe to cache long-term ### **Semi-Static Data (2 hour TTL)** - Categories, tags, user profiles - Cache-Control: `public, max-age=7200` - **Why**: Changes occasionally but stable for hours ### **Dynamic Data (15 minute TTL)** - Posts, pages, comments - Cache-Control: `public, max-age=900` - **Why**: Content changes frequently, shorter cache needed ### **Session Data (30 minute TTL)** - Authentication status, current user info - Cache-Control: `private, max-age=1800` - **Why**: User-specific data, moderate stability ## ๐Ÿ› ๏ธ **Cache Management Tools** The system includes dedicated cache management tools: ### **wp_cache_stats** Get detailed cache statistics for performance monitoring. ```bash wp_cache_stats --site="site1" ``` **Returns:** - Hit/miss rates - Total cache entries - Eviction statistics - Invalidation queue status ### **wp_cache_clear** Clear cache entries with optional pattern matching. ```bash # Clear all cache wp_cache_clear --site="site1" # Clear specific patterns wp_cache_clear --site="site1" --pattern="posts" wp_cache_clear --site="site1" --pattern="categories" ``` ### **wp_cache_warm** Pre-populate cache with essential WordPress data. ```bash wp_cache_warm --site="site1" ``` Warms cache with: - Current user information - Categories and tags - Site settings ### **wp_cache_info** Get detailed cache configuration and status. ```bash wp_cache_info --site="site1" ``` ## โš™๏ธ **Configuration** ### **Enable/Disable Caching** Caching is **enabled by default**. To disable: ```bash export DISABLE_CACHE=true ``` ### **Cache Settings** Configure via `SecurityConfig.cache` in `src/security/SecurityConfig.ts`: ```typescript cache: { enabled: true, maxSize: 1000, // Maximum cache entries defaultTTL: 15 * 60 * 1000, // 15 minutes default enableLRU: true, enableStats: true, // TTL presets by data type ttlPresets: { static: 4 * 60 * 60 * 1000, // 4 hours semiStatic: 2 * 60 * 60 * 1000, // 2 hours dynamic: 15 * 60 * 1000, // 15 minutes session: 30 * 60 * 1000, // 30 minutes realtime: 60 * 1000 // 1 minute } } ``` ## ๐Ÿ”„ **Cache Invalidation** ### **Automatic Invalidation Rules** The system automatically invalidates related cache entries when content changes: **Post Operations:** - **Create Post** โ†’ Clears posts listings, categories, tags, search - **Update Post** โ†’ Clears specific post, posts listings, search - **Delete Post** โ†’ Clears posts listings, categories, tags, search **Category/Tag Operations:** - **Create/Update/Delete** โ†’ Clears taxonomies AND related posts - **Cascading Effect** โ†’ Post cache cleared when categories change **User Operations:** - **Update User** โ†’ Clears user cache, current user cache - **User Role Changes** โ†’ Clears capability-dependent caches ### **Manual Invalidation** ```bash # Clear specific patterns wp_cache_clear --pattern="posts.*" # All post-related cache wp_cache_clear --pattern="categories" # Category cache wp_cache_clear --pattern="users" # User cache # Clear everything (nuclear option) wp_cache_clear ``` ## ๐Ÿงช **Testing & Benchmarking** ### **Run Cache Tests** ```bash npm run build node scripts/test-caching.js ``` **Tests Include:** - Cache infrastructure performance - Memory usage analysis - Hit/miss rate calculations - Invalidation timing - Configuration validation ### **Performance Monitoring** Monitor cache effectiveness: ```bash # Check cache statistics wp_cache_stats --site="your-site" # Monitor hit rates over time while true; do wp_cache_stats --site="your-site" | grep "hit_rate" sleep 30 done ``` ### **Expected Performance Gains** **Before Caching:** - Categories API call: ~200-500ms - Repeated user lookups: ~150-300ms each - Site settings: ~100-200ms each call **After Caching:** - Categories (cached): ~1-5ms - User lookups (cached): ~1-3ms - Site settings (cached): ~1-2ms ## ๐Ÿ” **Multi-Site Support** Each WordPress site gets isolated cache: **Cache Key Format:** ```text {siteId}:{endpoint}:{params_hash} ``` **Examples:** ```text site1:posts:abc123 # Site 1 posts listing site2:posts:abc123 # Site 2 posts listing (separate) site1:categories:def456 # Site 1 categories ``` **Site-Specific Operations:** ```bash wp_cache_clear --site="site1" # Clear only site1 cache wp_cache_clear --site="site2" --pattern="posts" # Clear site2 posts only ``` ## ๐Ÿšจ **Troubleshooting** ### **Cache Not Working** 1. **Check if caching is enabled:** ```bash wp_cache_info --site="your-site" ``` 2. **Verify no DISABLE_CACHE environment variable:** ```bash echo $DISABLE_CACHE # Should be empty or 'false' ``` 3. **Check cache statistics:** ```bash wp_cache_stats --site="your-site" ``` - Hit rate should increase over time - Total entries should grow with usage ### **Poor Cache Performance** 1. **Monitor hit rates:** - Good: >60% hit rate after warm-up - Poor: <30% hit rate indicates issues 2. **Check TTL settings:** - Too short: Frequent cache misses - Too long: Stale data issues 3. **Memory pressure:** - LRU evictions happening too frequently - Consider increasing `maxSize` in config ### **Stale Data Issues** 1. **Check invalidation:** ```bash wp_cache_info --site="your-site" ``` - Verify invalidation rules are active - Check queue processing status 2. **Manual cache clear:** ```bash wp_cache_clear --site="your-site" --pattern="problematic_endpoint" ``` 3. **Verify TTL appropriateness:** - Static data: 4h is usually safe - Dynamic content: Consider shorter TTL ## ๐Ÿ“ˆ **Optimization Tips** ### **For High-Traffic Sites** 1. **Increase cache size:** ```typescript maxSize: 2000; // From default 1000 ``` 2. **Tune TTL values:** ```typescript ttlPresets: { static: 8 * 60 * 60 * 1000, // 8 hours for very stable data semiStatic: 4 * 60 * 60 * 1000, // 4 hours dynamic: 30 * 60 * 1000, // 30 minutes for less active sites } ``` 3. **Pre-warm cache on deployment:** ```bash wp_cache_warm --site="production-site" ``` ### **For Development** 1. **Shorter TTL for faster iteration:** ```typescript ttlPresets: { dynamic: 30 * 1000, // 30 seconds for development } ``` 2. **Easy cache clearing:** ```bash # Add to development scripts wp_cache_clear # Clear all during development ``` ## ๐Ÿ”ฎ **Future Enhancements** Planned improvements: - **Redis backend** for distributed caching - **Cache warming strategies** based on access patterns - **Adaptive TTL** based on content change frequency - **Cache compression** for larger datasets - **Metrics dashboard** for cache performance visualization --- The intelligent caching system provides significant performance improvements while maintaining data freshness appropriate for each content type. It's designed to work transparently with existing WordPress operations while providing tools for monitoring and management.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/docdyhr/mcp-wordpress'

If you have feedback or need assistance with the MCP directory API, please join our Discord server