mperham/dalli — pull request #278 by tmm1 (2012-10-29 01:08:37+00:00)
Title: Explicit errors, compression settings and get_multi perf improvement

Includes a bunch of stuff. Opening this pull request for review. I can split out the separate features, or feel free to cherry-pick whatever.

The get_multi fix (d1e9d20808a5f9b23d61a3f4a7c86eb32545121b) improves performance when using large server pools:

Before:

```
Dalli::Client#get_multi
Dalli::Server#getkq(@hostname="memcache25", key="github-production-dalli:commit:3:n19313284:ad289b076eb869cce1d4c18f27f478977c855693") <0.000129>
Dalli::Server#noop(@hostname="memcache1") <0.000236>
Dalli::Server#noop(@hostname="memcache2") <0.000306>
Dalli::Server#noop(@hostname="memcache3") <0.000254>
Dalli::Server#noop(@hostname="memcache4") <0.000282>
Dalli::Server#noop(@hostname="memcache5") <0.000248>
Dalli::Server#noop(@hostname="memcache6") <0.000346>
Dalli::Server#noop(@hostname="memcache7") <0.000472>
Dalli::Server#noop(@hostname="memcache8") <0.000658>
Dalli::Server#noop(@hostname="memcache9") <0.000685>
Dalli::Server#noop(@hostname="memcache10") <0.000885>
Dalli::Server#noop(@hostname="memcache11") <0.000277>
Dalli::Server#noop(@hostname="memcache12") <0.000209>
Dalli::Server#noop(@hostname="memcache13") <0.000664>
Dalli::Server#noop(@hostname="memcache14") <0.000631>
Dalli::Server#noop(@hostname="memcache15") <0.000371>
Dalli::Server#noop(@hostname="memcache16") <0.001067>
Dalli::Server#noop(@hostname="memcache17") <0.000187>
Dalli::Server#noop(@hostname="memcache18") <0.000241>
Dalli::Server#noop(@hostname="memcache19") <0.000187>
Dalli::Server#noop(@hostname="memcache20") <0.000221>
Dalli::Server#noop(@hostname="memcache21") <0.000269>
Dalli::Server#noop(@hostname="memcache22") <0.000369>
Dalli::Server#noop(@hostname="memcache23") <0.000624>
Dalli::Server#noop(@hostname="memcache24") <0.000244>
Dalli::Server#noop(@hostname="memcache25") <0.000318>
Dalli::Client#get_multi <0.012049>
```

After:

```
Dalli::Client#get_multi
Dalli::Server#getkq(@hostname="memcache25", key="github-production-dalli:commit:3:n281326473:0aefbada267b71191b89b0d50eeb6f1d3a90d385") <0.000129>
Dalli::Server#noop(@hostname="memcache25") <0.000373>
Dalli::Client#get_multi <0.000761>
```

Ideally get_multi would go further to avoid serialized blocking reads in the multiserver case. I started on something like this in 090889cdc6c8bc91c0dbd612889c154d4d9588cb.