Initial commit
[memstore.git] / memcache / README.md
1 Memcache
2 ========
3
4 _Library for memcached protocol_
5
6 Author: Kevin Rosenberg <kevin@rosenberg.net>, based on the
7 `cl-memcached` library by Abhijit 'quasi' Rao and 
8 Chaitanya Gupta .
9
10 Overview
11 --------
12
13 This package is based on the cl-memcached library.
14 It is substantially modified for use with the memstore
15 package. The primary areas of additional functionality
16 are:
17
18 * Support for flags field with get and set functions.
19   This is required as memstore stores bit flags denoting
20   how the data is serialized. That information is required
21   to deserialize the data.
22
23 * Support for additional memcached functionality, such as
24   the gets command for retrieving CAS identifiers. The CAS
25   unique ID is used for the added `:cas` storage command.
26   Other storage commands newly supported are `:append` and 
27   `:prepend`.
28
29 * All communication now uses `mc-send-command` function with
30   transparently supports writing strings with `write-byte`.
31   This allows `usocket` to be used on other Lisp implementations
32   besides AllegroCL. Because cl-memcached used `write-string`
33   with usocket-stream, only AllegroCL was supported.
34   By sending all data as (unsigned-byte 8), all Lisp implementions
35   supported by `usocket` are now supported with `memcached`.
36
37 * Encapsulated reading and writing to socket stream to avoid
38   handling \#return characters in high-level code.
39
40 * Changes to support the change in statistics fields with membase.
41   Some fields were no longer present. Also, membase 1.7 has
42   187 statistics fields versus the 20 fields supported in
43   `cl-memcached`. New function `mc-get-stat` allows to retrieving
44   any statistics field by name.
45
46 * More robust `print-object` functions to avoid errors if fields
47   in statistics are not present.
48
49 * Removed compatibility functions in `compat.lisp` and using `kmrcl`
50   package to provide those functions as well as utilitizing other
51   `kmrcl` functions to simplify code.
52
53 * Nearly the entire code base has been reworked for improved
54   robustness and efficiency.