Package: pymemcache
pymemcacheA comprehensive, fast, pure-Python memcached client.pymemcache supports the following features:Complete implementation of the memcached text protocol.Connections using UNIX sockets, or TCP over IPv4 or IPv6.Configurable timeouts for socket connect and send/recv calls.Access to the “noreply” flag, which can significantly increase the speed of writes.Flexible, modular and simple approach to serialization and deserialization.The (optional) ability to treat network and memcached errors as cache misses.Installing pymemcacheInstall from pip:pipinstallpymemcacheFor development, clone from github and run the tests:gitclonehttps://github.com/pinterest/pymemcache.gitcdpymemcacheRun the tests (make sure you have a local memcached server running):toxUsageSee the documentation here:https://pymemcache.readthedocs.io/en/latest/DjangoSince version 3.2, Django has included a pymemcache-based cache backend.
Seeits documentation.On older Django versions, you can usedjango-pymemcache.Comparison with Other LibrariespylibmcThe pylibmc library is a wrapper around libmemcached, implemented in C. It is
fast, implements consistent hashing, the full memcached protocol and timeouts.
It does not provide access to the “noreply” flag. It also isn’t pure Python,
so using it with libraries like gevent is out of the question, and its
dependency on libmemcached poses challenges (e.g., it must be built against
the same version of libmemcached that it will use at runtime).python-memcachedThe python-memcached library implements the entire memcached text protocol, has
a single timeout for all socket calls and has a flexible approach to
serialization and deserialization. It is also written entirely in Python, so
it works well with libraries like gevent. However, it is tied to using thread
locals, doesn’t implement “noreply”, can’t treat errors as cache misses and is
slower than both pylibmc and pymemcache. It is also tied to a specific method
for handling clusters of memcached servers.memcache_clientThe team at mixpanel put together a pure Python memcached client as well. It
has more fine grained support for socket timeouts, only connects to a single
host. However, it doesn’t support most of the memcached API (just get, set,
delete and stats), doesn’t support “noreply”, has no serialization or
deserialization support and can’t treat errors as cache misses.External LinksThe memcached text protocol reference page:https://github.com/memcached/memcached/blob/master/doc/protocol.txtThe python-memcached library (another pure-Python library):https://github.com/linsomniac/python-memcachedMixpanel’s Blog post about their memcached client for Python:https://engineering.mixpanel.com/we-went-down-so-we-wrote-a-better-pure-python-memcache-client-b409a9fe07a9Mixpanel’s pure Python memcached client:https://github.com/mixpanel/memcache_clientBye-bye python-memcached, hello pymemcache (migration guide)https://jugmac00.github.io/blog/bye-bye-python-memcached-hello-pymemcache/CreditsCharles GordonDave DashDan CrostaJulian BermanMark ShirleyTim BartThomas OrozcoMarc AbramowitzMarc-Andre CourtoisJulien DanjouINADA NaokiJames SocolJoshua HarlowJohn AndersonAdam ChainzErnest W. Durbin IIIRemco van OosterhoutNicholas CharriereJoe GordonJon PariseStephen RosenFeras AlazzehMoisés Guimarães de MedeirosNick PopeHervé BeraudMartin JørgensenWe’re Hiring!Are you really excited about open-source? Or great software engineering?
Pinterest ishiring!ChangelogNew in version 4.0.0Dropped Python 2 and 3.6 support#321#363Begin adding typingAdd pluggable compression serde#407New in version 3.5.2Handle blankSTATvalues.New in version 3.5.1Client.getreturns the default when usingignore_excand if memcached
is unavailableAddednoreplysupport toHashClient.flush_all.New in version 3.5.0Sockets are now closed onMemcacheUnexpectedCloseError.Added support for TCP keepalive for client sockets on Linux platforms.Added retrying mechanisms by wrapping clients.New in version 3.4.4Idle connections will be removed from the pool afterpool_idle_timeout.New in version 3.4.3FixHashClient.{get,set}_many()with UNIX sockets.New in version 3.4.2Remove trailing space for commands that don’t take arguments, such asstats. This was a violation of the memcached protocol.New in version 3.4.1CAS operations will now raiseMemcacheIllegalInputErrorwhenNoneis
given as thecasvalue.New in version 3.4.0Added IPv6 support for TCP socket connections. Note that IPv6 may be used in
preference to IPv4 when passing a domain name as the host if an IPv6 address
can be resolved for that domain.HashClientnow supports UNIX sockets.New in version 3.3.0HashClientcan now be imported from the top-levelpymemcachepackage
(e.g.pymemcache.HashClient).HashClient.get_many()now longer storesFalsefor missing keys from
unavailable clients. Instead, the result won’t contain the key at all.Added missingHashClient.close()andHashClient.quit().New in version 3.2.0PooledClientandHashClientnow support customClientclassesNew in version 3.1.1ImproveMockMemcacheClientto behave even more likeClientNew in version 3.1.0Add TLS support for TCP sockets.Fix corner case when dead hashed server comes back alive.New in version 3.0.1Make MockMemcacheClient more consistent with the real client.Passencodingfrom HashClient to its pooled clients whenuse_poolingis enabled.New in version 3.0.0The serialization API has been reworked. Instead of consuming a serializer
and deserializer as separate arguments, client objects now expect an argumentserdeto be an object which implementsserializeanddeserializeas methods. (serializeanddeserializeare still supported but
considered deprecated.)Validate integer inputs forexpire,delay,incr,decr, andmemlimit– non-integer values now raiseMemcacheIllegalInputErrorValidate inputs forcas– values which are not integers or strings of
0-9 now raiseMemcacheIllegalInputErrorAddprependandappendsupport toMockMemcacheClient.Add thetouchmethod toHashClient.Added official support for Python 3.8.New in version 2.2.2Fixlong_descriptionstring in Python packaging.New in version 2.2.1Fixflagswhen setting multiple differently-typed values at once.New in version 2.2.0Drop official support for Python 3.4.Usesetup.cfgmetadata insteadsetup.pyconfig to generate package.Adddefault_noreplyparameter toHashClient.Addencodingparameter toClientconstructors (defaults toascii).Addflagsparameter to write operation methods.Handle unicode key values inMockMemcacheClientcorrectly.Improve ASCII encoding failure exception.New in version 2.1.1Fixsetup.pydependency on six already being installed.New in version 2.1.0Public classes and exceptions can now be imported from the top-levelpymemcachepackage (e.g.pymemcache.Client).#197Add UNIX domain socket support and document server connection options.#206Add support for thecache_memlimitcommand.#211Commands key are now always sent in their original order.#209New in version 2.0.0Change set_many and set_multi api return value.#179Fix support for newbytes from python-future.#187Add support for Python 3.7, and drop support for Python 3.3Properly batch Client.set_many() call.#182Improve _check_key() and _store_cmd() performance.#183Properly batch Client.delete_many() call.#184Add option to explicitly set pickle version used by serde.#190New in version 1.4.4pypy3 to travis test matrixfull benchmarks in testfix flake8 issuesHave mockmemcacheclient support non-ascii stringsSwitch from using pickle format 0 to the highest available version. See#156Warning: different versions of python have different highest pickle versions:https://docs.python.org/3/library/pickle.htmlNew in version 1.4.3Documentation improvementsFixed cachedump stats command, see#103Honor default_value in HashClientNew in version 1.4.2Drop support for python 2.6, see#109New in version 1.4.1Python 3 serializations fixes#131Drop support for pypy3Comment cleanupAdd gets_many to hash_clientBetter checking for illegal chars in keyNew in version 1.4.0Unicode keys support. It is now possible to pass the flagallow_unicode_keyswhen creating the clients, thanks @jogo!Fixed a bug where PooledClient wasn’t followingdefault_noreplyarg set on init, thanks @kols!Improved documentationNew in version 1.3.8use cpickle instead of pickle when possible (python2)New in version 1.3.7default parameter on get(key, default=0)fixed docs to autogenerate themselves with sphinxfix linter to work with python3improve error message on illegal Input for the keyrefactor stat parsingfix MockMemcacheClientfix unicode char in middle of key bugNew in version 1.3.6Fix flake8 and cleanup tox buildingFix security vulnerability by sanitizing key inputNew in version 1.3.5Bug fix for HashClient when retries is set to zero.Adding the VERSION command to the clients.New in version 1.3.4Bug fix for the HashClient that corrects behavior when there are no working servers.New in version 1.3.3Adding caching to the Travis build.A bug fix for pluggable hashing in HashClient.Adding a default_noreply argument to the Client ctor.New in version 1.3.2Making the location of Memcache Exceptions backwards compatible.New in version 1.3.0Python 3 SupportIntroduced HashClient that uses consistent hasing for allocating keys across many memcached nodes. It also can detect servers going down and rebalance keys across the available nodes.Retry sock.recv() when it raises EINTRNew in version 1.2.9Introduced PooledClient a thread-safe pool of clients