hhvm
hhvm copied to clipboard
Add `getMulti` to `mcrouter` extension
Is your feature request related to a problem? Please describe.
memcached (and mcrouter since it also implements the memcached spec) allows multiple keys to be provided to the get and gets commands which in turn will return multiple results. (Protocol Reference)
However, the API offered by the HHVM Extension for McRouter only has a single-key get method implemented. (HHVM Docs)
However, the memcached extension included in HHVM does include a getMulti which offers this functionality. (phpdoc reference)
Describe the solution you'd like
It'd be great if the mcrouter HHVM extension also offered a binding for getMulti to bring parity with the memcached extension.
Describe alternatives you've considered Two main alternatives
-
Keep using
mcrouterbut just only with single-key fetches This is a fine workaround and what I've been doing for now. But just thinking longer-term, it's not exactly ideal to have to make a single request per key fetched from memcached when potentially dozens of objects might be fetched (e.g. to load a feed). -
Switch to the
memcachedextension instead ofmcrouterThis is what I will probably wind up doing if I eventually need this functionality.mcrouteris nice but I'm definitely not working at such a scale where I need its functionality more than vanillamemcached's
Additional context
I'd be happy to work on this in spare time. I'm sure the core team has more important things to tackle. I mostly want to make sure there isn't anything in the pipeline that'll jeopardize the value of embarking on this work on my own e.g. if the mcrouter extension were gonna be wholesale replaced or something.
There's no plans to remove it; this might also need changes to the mcrouter library itself.
Keep using mcrouter but just only with single-key fetches
Simplifying a bit, but this is basically what we do internally; it lets us start working on some data while waiting for others. Two reasons
- replacing batching with continuous dispatch means you request the data earlier
- when you're using mcrouter, a single multiget can end up in requests to multiple servers once you're past the routing part