On 6/27/07, Mauro Infantino <[EMAIL PROTECTED]> 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

Reply via email to