This repository has been archived on 2018-06-04. You can view files and clone it, but cannot push or open issues or pull requests.
pylibmc/README.rst

138 lines
4.4 KiB
ReStructuredText
Raw Normal View History

2009-07-31 20:19:25 +00:00
`pylibmc` is a Python wrapper around the accompanying C Python extension
`_pylibmc`, which is a wrapper around `libmemcached` from TangentOrg.
You have to install `libmemcached` separately, and have your compiler and
linker find the include files and libraries.
With `libmemcached` installed and this package set up, the following basic
usage example should work::
>>> import pylibmc
>>> mc = pylibmc.Client(["127.0.0.1:11211"])
>>> mc.set("foo", "Hello world!")
True
>>> mc.get("foo")
'Hello world!'
The API is pretty much `python-memcached`. Some parts of `libmemcached` aren't
exposed yet. I think.
There's also support for some other features not present in other Python
libraries, for example, the binary protocol::
>>> mc = pylibmc.Client(["127.0.0.1"], binary=True)
That's it, the binary protocol will be used for that instance.
2009-07-31 20:19:25 +00:00
Behaviors
=========
`libmemcached` has ways of telling it how to behave. You'll have to refer to
its documentation on what the different behaviors do.
To change behaviors, quite simply::
>>> mc.behaviors["hash"] = "fnv1a_32"
For a list of the defined behavior key names, see what the keys of a client is.
For example::
>>> mc.behaviors.keys() # doctest: +NORMALIZE_WHITESPACE
['hash', 'connect timeout', 'cache lookups', 'buffer requests',
'verify key', 'support cas', 'poll timeout', 'no block', 'tcp nodelay',
'distribution', 'sort hosts']
The ``hash`` and ``distribution`` keys are mapped by the Python module to constant
integer values used by `libmemcached`. See ``pylibmc.hashers`` and
``pylibmc.distributions``.
2009-09-21 15:31:25 +00:00
Pooling
=======
In multithreaded environments, accessing the same memcached client object is
both unsafe and counter-productive in terms of performance. `libmemcached`'s
take on this is to introduce pooling on C level, which is correspondingly
mapped to pooling on Python level in `pylibmc`::
>>> mc = pylibmc.Client(["127.0.0.1"])
>>> pool = pylibmc.ThreadMappedPool(mc)
>>> # (in a thread...)
>>> with pool.reserve() as mc:
... mc.set("hello", "world")
For more information on pooling, see `my two`__ `long posts`__ about it.
__ http://lericson.blogg.se/code/2009/september/draft-sept-20-2009.html
__ http://lericson.blogg.se/code/2009/september/pooling-with-pylibmc-pt-2.html
2009-07-31 20:19:25 +00:00
Comparison to other libraries
=============================
Why use `pylibmc`? Because it's fast.
`See this (a bit old) speed comparison`__, or `amix.dk's comparison`__.
2009-07-31 20:19:25 +00:00
__ http://lericson.blogg.se/code/2008/november/pylibmc-051.html
__ http://amix.dk/blog/viewEntry/19471
2009-08-16 15:10:17 +00:00
IRC
===
``#sendapatch`` on ``chat.freenode.net``.
2009-07-31 20:19:25 +00:00
Change Log
==========
2009-10-31 10:21:55 +00:00
New in version 0.9
------------------
- Added a ``get_stats`` method, which behaves exactly like
`python-memcached`'s equivalent.
- Gives the empty string for empty memcached values like `python-memcached`
does.
- Added exceptions for most `libmemcached` return codes.
2009-11-25 11:02:20 +00:00
- Fixed an issue with ``Client.behaviors.update``.
2009-10-31 10:21:55 +00:00
2009-09-21 13:37:35 +00:00
New in version 0.8
------------------
- Pooling helpers are now available. See ``pooling.rst`` in the distribution.
2009-09-21 15:22:50 +00:00
- The binary protocol is now properly exposed, simply pass ``binary=True`` to
the constructor and there you go.
2009-09-21 13:37:35 +00:00
- Call signatures now match `libmemcached` 0.32, but should work with older
versions. Remember to run the tests!
2009-09-07 00:29:35 +00:00
New in version 0.7
------------------
- Restructured some of the code, which should yield better performance (if not
for that, it reads better.)
- Fixed some memory leaks.
- Integrated changes from `amix.dk`, which should make pylibmc work under
Snow Leopard.
- Add support for the boolean datatype.
2009-09-07 18:59:17 +00:00
- Improved test-runner -- now tests ``build/lib.*/_pylibmc.so`` if available,
and reports some version information.
2009-09-07 20:00:08 +00:00
- Support for x86_64 should now work completely.
- Builds with Python 2.4, tests run fine, but not officially supported.
- Fixed critical bugs in behavior manipulation.
2009-09-07 00:29:35 +00:00
2009-07-31 20:19:25 +00:00
New in version 0.6
------------------
- Added compatibility with `libmemcached` 0.26, WRT error return codes.
- Added `flush_all` and `disconnect_all` methods.
- Now using the latest pickling protocol.
2009-07-31 20:19:25 +00:00
New in version 0.5
------------------
- Fixed lots of memory leaks, and added support for `libmemcached` 0.23.
2009-07-31 21:14:59 +00:00
- Also made the code tighter in terms of compiler pedantics.
2009-07-31 20:19:25 +00:00
New in version 0.4
------------------
- Renamed the C module to `_pylibmc`, and added lots of `libmemcached` constants
to it, as well as implemented behaviors.