(
1.2.0.0's source was not completely checked-in so in order to be in sync with the source I'm replacing 1.2.0.0 with 1.2.0.2. This version can be built from source and should be identical to the official release except the signing.)
(
i've accidentally deleted the page for 1.2.0.2, this release is supposed to be the same)
What's inside?
This release contains some bugfixes and a bunch of new features.
Non blocking socket pool
The previous version used a bunch of ReaderWriterLocks to keep track of the working/free/dead sockets. By replacing this with a non-blocking queue we can avoid a lot of unnecessary waits. Based on some very un-scientific testing (allocating millions of sockets simultaneously by hundreds of threads) the socket pool part of the code has been improved by ~40% compared to the locking version.
Extensibility
- The client can now be configured from either app/web.config and declaratively from code. This can be further extended by implementing the IMemcacedConfiguration interface.
- Custom server->item mapping. By implementing the INodeLocator interface one can specify how items are mapped to Memcached servers, thus everyone can implement his favorite "consistent hashing" agorithm
- Implement the IMemcachedKeyTransformer to specify how the item keys are transcoded for use inside Memcached. The following transformers are included by default:
- Base64: base64(utf8(itemKey))
- SHA1: base64(sha1(unicodeBytes(itemKey)))
- TigerHash: base64(tiger(unicodeBytes(itemKey)))
- Default: no transformation, just checks for invalid values inside the key which would cause protocol errors
- Controlling the serialization can be achieved by implementing the ITranscoder interface. The default transcoder works as it did before: primitive values are hand-serialized, the rest is taken care of by the BinaryFormatter. If you need cross-language compatibilty you can implement your own transcoder.