Hi,
To use memcached as your session handler in PHP, you can specify the
following directives in your php.ini:
session.save_handler = memcache
session.save_path = "http://localhost:11211"
To test if your current version of php/pecl-memcached supports session
do a var_dump(MEMCACHE_HAVE_SESSION), if 1 then you are good to go,
otherwise you need to upgrade php/pecl-memcached.
For caching SQL queries, I would recommend you simply create cookies
between relational queries and keep track of the DML's that affect a
particular cache.
Regards,
John
Brian Moon wrote:
- Does php's memcached client API supports (consistent?) key hashing?
I believe verion 3(alpha) does.
- Is memcache's php session handler a good way to store information
about a user? Or would it be better to manually store user info to
memcache? I'm trying to figure out if memcache's session handler saves
variables as one big chunk (so it cannot overpass the 1MB limitation)
or as different chunks (that transparently integrates them into the
php $_SESSION array).
If your session data is not volitale and can be lost at any moment,
then it is ok to store it ONLY in memcached. But, most use memcached
as a cache and not as storage. Having said that, I have not used a
memcached session handler for PHP. It is not supported natively that
I know of. So, you would have to look at the handler you are using.
- The most intriguing issue I've been buffled about is the following:
How to store SQL results. For example, say I store SELECTs as md5 into
memcache. Then say at some point in the code, an UPDATE is executed.
How can I determine which memcache keys (that is, which SELECTs)
should be invalidated?? Is there a framework or some way that do this
gracefully? Or should I use memcache only for queries that do not need
be updated immediately, but can update after they expire?
You can really go two ways.
1. Cache raw sql queries and just let them expire. Lacks granularity,
but is easy to implement. If you start removing cache just when the
table changes, you are not doing much good. The MySQL query cache can
do that on a MySQL server. But, it is not nearly as good as a smart
memcached implementation.
2. Cache data at the object level instead of the query level. This
will require more code and more
For more information and ideas, you may want to read this:
http://www.socialtext.net/memcached/index.cgi?faq#cache_things_other_than_sql_data
And I have posted some high level cache concepts in this blog post:
http://doughboy.wordpress.com/2007/06/23/caching-and-patience/