[development] Refresh rather than re-create D6 cache
Tomáš Fülöpp (vacilando.org)
tomi at vacilando.org
Mon Oct 18 15:40:50 UTC 2010
Larry, thanks for the tips; I am looking into how search indexing works and
I definitely will use Views Content Cache (don't know how could I miss it!)
On Mon, Oct 18, 2010 at 15:41, larry at garfieldtech.com <
larry at garfieldtech.com> wrote:
> I... think I follow? It sounds like you want an approach like the search
> index uses; when you tell it to rebuild the search index it doesn't truncate
> the index but marks all records as "dirty", so they get reindexed over time
> by cron.
>
> You may also find this of use:
>
> http://drupal.org/project/views_content_cache
>
> --Larry Garfield
>
>
> On 10/18/10 8:31 AM, Tomáš Fülöpp (vacilando.org) wrote:
>
>> Yes, Larry, I did experiment with that approach as well. It allows
>> caches to expire at different times, but a) you need to keep some sort
>> of approximate overview about the various expiration delays you're
>> setting (so that they don't have much chance happening at the same time)
>> and b) whenever such cache happens to expire, it still gets deleted at
>> cron and then will have to be re-calculated during the precious time of
>> page request.
>>
>> Currently I am thinking about the following approach - crude pseudo code:
>>
>> // Make sure no other cache has been started over defined period
>> * set buffer period between cache refreshes $cbuffer = 15 seconds
>> * if ( (time()-$lastcacherun) > $cbuffer )
>>
>> // Check if the cache at hand has expired
>> * Set some cache life time $clife
>> * SELECT `created` FROM `cache` where `cid` = 'cachedobjectname'
>> * if ( (time()-$created) > $clife )
>>
>> // Refresh the expired cache
>> * $lastcacherun = time()
>> * recreate cachedobjectname
>> * DELETE FROM `cache` WHERE cid = 'cachedobjectname'
>> * cache cachedobjectname using cache_set with CACHE_PERMANENT
>>
>> What do you think?
>>
>>
>>
>>
>>
>>
>> On Mon, Oct 18, 2010 at 14:34, larry at garfieldtech.com
>> <mailto:larry at garfieldtech.com> <larry at garfieldtech.com
>>
>> <mailto:larry at garfieldtech.com>> wrote:
>>
>> Just to make sure, have you tried using the minimum cache lifetime
>> on the performance page? It essentially says that a cache record
>> will always last at least that long, even if a clear is requested
>> for it. That's your first step if you're finding some caches
>> clearing too frequently (especially the expensive filter and page
>> caches).
>>
>> --Larry Garfield
>>
>>
>> On 10/18/10 5:22 AM, Tomáš Fülöpp (vacilando.org
>> <http://vacilando.org>) wrote:
>>
>> Hi,
>>
>> In D6, after all caches are cleared, or after a lot of them
>> expire and
>> get emptied by cron, the server load spikes seriously because
>> all such
>> caches need to be re-populated.
>>
>> Since this happens more and more on sites I work on, I have been
>> thinking about using another approach in my modules, in the
>> sense that
>> caches would be /refreshed/ rather than cleared and
>> re-populated. Each
>> cache refresh would run depending on e.g. a simple variable
>> storing last
>> time stamp of any other cache refresh.
>>
>> This would assure that a) all cached values would be available
>> at all
>> times, b) caches would never be re-calculated all at the (near)
>> same time.
>>
>> I am about to write logic for this, but wanted to first check with
>> others in the list -- perhaps some of you know or can point to an
>> elegant solution that already exists.
>>
>> Thanks!
>>
>> vacilando
>>
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/development/attachments/20101018/6cf1481f/attachment.html
More information about the development
mailing list