stumped - data dissapearing

Lou Kosak lkosak at gmail.com
Thu Jun 28 14:21:38 UTC 2007


On 6/27/07, Mauro Infantino <plenque at gmail.com> wrote:
> Lou Kosak wrote:
> > I've looked all over and can't seem to figure out why my memcache
> > session data is periodically disappearing.  Here's my setup:
> >
> > On one server, I'm running memcached 1.2.2
> >
> > memcached -d -m 1024 -u memcached -l 172.17.10.158 -p 11211
> >
> > On another, I'm running a PHP 5 webapp with ADOdb session handling.
> > I've added functionality to session read, write, and destroy, which
> > looks like this:
> >
> > session write modifications:
> >
> >        if($memcache)
> >        {
> >            if($memcache->set(MEMCACHE_PREFIX_SESSION . "$key",
> > rawurlencode($value), 0, 900)) {
> >                Debug::notice('Wrote session data to memcache (' .
> > MEMCACHE_PREFIX_SESSION . $key.')');
> >            } else {
> >                Debug::notice("Failed to write session data to memcache");
> >            }
> >        }
> >
> > session read modifications:
> >
> >         if($memcache)
> >         {
> >             $v = $memcache->get(MEMCACHE_PREFIX_SESSION . $key);
> >
> >             if($v)
> >             {
> >                 Debug::notice('Retrieved session data from memcache
> > (Skipped DB)');
> >
> >                 $v = rawurldecode($v);
> >
> >                 return $v;
> >             } else {
> >                 Debug::notice('Memcache key does not exist: ' .
> > MEMCACHE_PREFIX_SESSION . $key);
> >             }
> >         }
> >
> > session destroy modifications:
> >
> >         if($memcache)
> >         {
> >             $memcache->delete(MEMCACHE_PREFIX_SESSION . "$key");
> >         }
> >
> >
> > memcache stats:
> >
> >    [pid] => 14287
> >    [uptime] => 105065
> >    [time] => 1183003550
> >    [version] => 1.2.2
> >    [pointer_size] => 64
> >    [rusage_user] => 25.541117
> >    [rusage_system] => 75.528517
> >    [curr_items] => 92466
> >    [total_items] => 1896346
> >    [bytes] => 69351332
> >    [curr_connections] => 4
> >    [total_connections] => 1875966
> >    [connection_structures] => 526
> >    [cmd_get] => 1963660
> >    [cmd_set] => 1896346
> >    [get_hits] => 1820297
> >    [get_misses] => 143363
> >    [evictions] => 0
> >    [bytes_read] => 1564507648
> >    [bytes_written] => 1644336306
> >    [limit_maxbytes] => 1073741824
> >    [threads] => 1
> >
> > What I'm finding is that while browsing the site, every 5-10 page
> > loads I will see the error "Memcache key does not exist", but I never
> > see "Failed to write session data to memcache".  The site is always
> > able to connect to memcache (additional reporting of failed
> > connections is not being triggered).  According to $memcache->stats(),
> > I have plenty of free memory space and nothing is being evicted.  Does
> > anybody have an idea of what might be causing my data not to be
> > retrieved?
> >
> > Thank you very much!
> >
> I'm not familiar with ADOdb's session handling module, but could it be
> that it only writes session data when it changes? Then you could be
> hitting the
> 900 seconds timeout you're using when writing the session key to memcached.
>
> Also, this could be obvious, but since I don't see it in your code, keep
> in mind that you should also modify the database when writing and
> destroying the session.
>
> Regards,
> Mauro.
>

The ADOdb session code triggers the write() method on every page
serve.  It only updates the expiration time in the DB, but with the
memcache code I set() the entire thing for lack of a way to update
only its lifetime.  This happens much more often than every 900
seconds for the average user, and in the span of a minute I can watch
a key fail to be retrieved several times (as I said, one in every 5/10
page loads, but often fairly erratically), which makes me think that
expiration is not an issue.

-- 
Lou Kosak
Affable Gentleman of Leisure
Seattle, WA


More information about the memcached mailing list