Make WordPress Core

Opened 3 years ago

Closed 2 years 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 @ryan3 years ago

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

comment:2 @aaroncampbell3 years ago

  • Cc aaroncampbell added

comment:3 @ryan3 years ago

  • Milestone changed from Future Release to 3.6

comment:4 @ryan3 years ago

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

comment:5 @adamsilverstein3 years ago


comment:6 @ryan3 years ago

#23206 for wp_get_archives()

comment:7 @scribu3 years ago

  • Cc scribu added

comment:8 @scribu3 years ago

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

Last edited 3 years ago by scribu (previous) (diff)

comment:9 @ryan3 years 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 @ryan3 years ago

#23326 for get_terms()

comment:11 @ryan3 years ago

#23327 for get_bookmarks()

comment:12 @ryan3 years 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 @ryan3 years ago

In 23384:

Use incrementors for cache invalidation in get_terms().

fixes #23326
see #23173

comment:14 @ryan3 years 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 @ryan2 years ago

  • Milestone changed from 3.6 to Future Release

comment:16 @wonderboymusic2 years 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 @nacin2 years 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.