facebook / hhvm

A virtual machine for executing programs written in Hack.
https://hhvm.com
Other
18.19k stars 2.99k forks source link

Add `getMulti` to `mcrouter` extension #9009

Open Kilenaitor opened 2 years ago

Kilenaitor commented 2 years ago

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

  1. Keep using mcrouter but 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).

  2. Switch to the memcached extension instead of mcrouter This is what I will probably wind up doing if I eventually need this functionality. mcrouter is nice but I'm definitely not working at such a scale where I need its functionality more than vanilla memcached'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.

fredemmott commented 2 years ago

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