Make WordPress Core

Opened 15 months ago

Closed 7 months ago

#23173 closed task (blessed) (fixed)

Don't cache arrays of query results in a single cache bucket

Reported by: ryan Owned by:
Milestone: 3.6 Priority: normal
Severity: normal Version: 3.5
Component: Cache API Keywords:
Focuses: Cc:


We have started using one cache bucket per query with passive invalidation controlled through a last_changed incrementor. See #22024 for an example. We also need to do this with get_pages(), wp_get_archives(), and elsewhere. On wordpress.com we have hacked some of these into separate buckets because saving multiple queries per cache bucket results in huge buckets. We have seen 72MB get_pages caches. Let's finally clean this up for good. Some of the last_changed work done for #22176 can be used here.

Change History (17)

comment:1 ryan15 months ago

See #23167 for get_pages(). This ticket can be a tracking ticket for all such changes.

comment:2 aaroncampbell15 months ago

  • Cc aaroncampbell added

comment:3 ryan15 months ago

  • Milestone changed from Future Release to 3.6

comment:4 ryan15 months ago

  • Type changed from defect (bug) to task (blessed)

comment:5 adamsilverstein15 months ago


comment:6 ryan15 months ago

#23206 for wp_get_archives()

comment:7 scribu15 months ago

  • Cc scribu added

comment:8 scribu15 months ago

Looking at [23300], are we going to do function_exists( 'wp_cache_incr' ) or can we mandate that all the object cache backends implement it?

Version 0, edited 15 months ago by scribu (next)

comment:9 ryan15 months ago

Maybe wrap that logic in wp_bump_last_changed( 'post' )? Although if plugins like W3 Total Cache updated for 3.4 we might be able to drop the checks.

comment:10 ryan15 months ago

#23326 for get_terms()

comment:11 ryan15 months ago

#23327 for get_bookmarks()

comment:12 ryan15 months ago

get_calendar() also looks like a good one to update. It can invalidate with the posts last_changed.

If we introduce wp_cache_get_multi(), perhaps we should consider finally splitting alloptions and notoptions into individual cache buckets.

comment:13 ryan15 months ago

In 23384:

Use incrementors for cache invalidation in get_terms().

fixes #23326
see #23173

comment:14 ryan15 months ago

In 23385:

In wp_get_archives(), cache queries to individual cache buckets instead of storing them in one cached array. Use incrementor style passive cache invalidation.

fixes #23206
see #23173

comment:15 ryan12 months ago

  • Milestone changed from 3.6 to Future Release

comment:16 wonderboymusic8 months ago

  • Milestone changed from Future Release to 3.7

Looks like a lot of this made it in, moving to 3.7 for conf from Ryan

comment:17 nacin7 months ago

  • Milestone changed from 3.7 to 3.6
  • Resolution set to fixed
  • Status changed from new to closed

Setting this as fixed for 3.6. Any further conversions can happen in new tickets.

Note: See TracTickets for help on using tickets.