Multiget/intelligent generic PHP wrapper function... thoughts/advice wanted

mike mike503 at
Wed Oct 31 22:49:13 UTC 2007

On 10/31/07, Dustin Sallings <dustin at> wrote:
> On Oct 31, 2007, at 14:04 , mike wrote:
> > (side note, is there a such thing as a multi-set?)
>        In the binary protocol, there is neither a multi-get nor a multi-
> set.  Instead, a multi-get is built by streaming gets that don't
> report errors and then harvesting the results from the ones that did.
>        A similar thing could be built for sets, although I'd question the
> benefit of that over plain protocol pipelining given the relative
> rarity of sets.

That's cool. I was just wondering. Individual cache sets weren't my
biggest concern.

What would be interesting (and really useful) if the memcache_get
returned the key/value pairs, and if the cache was missed, returns
"false" or something else. Then I could just build an array on the
cache misses, instead of doing 2 or 3 iterations just due to making a
key list, checking the list, creating a list of what i need, adding
the individual missing rows back into the list, etc.

Or a second parameter that memcache_get returns with an array of what
was missed. I have to think doing it on the C/API level would be much
faster, and would make for much cleaner client-side code.

Then I could do something like:

function episode_get($keys = array()) {
	if(!isset($GLOBALS['ch'])) {
	list($cache_array, $cache_misses) = memcache_get($GLOBALS['ch'], $keys);
	if($cache_misses) {
		$q = db_query("SELECT * FROM episodes WHERE ID
		while($r = db_rows_assoc($q)) {
			$k = 'episodes:'.$r['ID'];
			cache_set($k, $r);
			$cache_array[$k] = $r;
	return $cache_array;

I think just that little bit of code would be able to replace everything..

More information about the memcached mailing list