php-memcache, delete, expiration questions, ideas
Veres Lajos
vlajos at ludens.elte.hu
Mon Dec 5 09:18:56 UTC 2005
Hello,
I'm a new user of memcache, and I'm very pleased with his performance.
We are using memcache for 2 reasons:
1. store users session information in all cache server
2. store cached data distributed between cache servers
We are using the php pecl api with a small wrapper for able to connect
more servers at the same time, and with some function for
store/delete/fetch data from/to all servers.
I tested the difference between storing data in all server or only one
server, and the penalty wasnt too painfull with persistence connections:
592 request/sec vs 555 request/sec (with 2 servers.)
get_fromall command are working by trying first localhost.
I think this set_toall,get_fromall,delete_fromall operations may helpfull
for any distributed APIS.
At least for "session" or other "original-in-memcache" like data.
We are storing the 2 type of data as i wrote, but I dont understand really
the expiration policy of memcache.
I should ensure our session data wont be dropped before his expiration
time, but as I seen if cache is nearly filled there is some chance
for this.
Exists any detailed description how expiration works?
For able to choose enought memory for memcached to avoid dropping
sessions, i started to log "bytes" provided by memcache_getstats
(php.net/memcache-getstats)
But it seems to growing continuosly.
This is very strange because all data we are storing has expiration.
Or expiration only happens if cache nearly filled?
As I seen in the mailing lists, the php-pecl APIs only disadvantage it
cant store "server-down" information with a "correct" way.
I guess this could be done with a "connection description" file or
something like this:
-if(read "servers.cache.cfg"){
- $servers loaded
-}else{ read "servers.cfg"){
- $servers loaded
-}
-try to connect to all servers
-if any fails then regenerate servers.cache.cfg without failed servers
-if all OK and servers.cache isnt existed then save servers.cache.cfg
And here needs some expirations method for servers.cache.cfg.
I guess we could get a random number from for example time, and/or client
ip, and/or apache unique_id or any better random like thing.
And if this random number matches a configurable chance (1% or similar),
than we can check mtime of servers.cache.cfg, and delete if older than some sec,
min.
I guess this expiration method isnt too complex, but seems failsafe for me.
Any comment?
And a last question:
This php pecl API allows any character in cache keys?
As I seen the protocoll doesnt allow spaces, but in the php.net
documentation doesnt say anything about keyname constraints.
Thanks.
--
Veres Lajos
vlajos at ludens.elte.hu
+36 20 438 5909
More information about the memcached
mailing list