Package: dj-pylibmc
This package provides a memcached cache backend for Django usingpylibmc.  You want to use pylibmc because
it’s fast.This is a fork of thedjango-pylibmcpackage.Do you need dj-pylibmc?Django now has a built-in pylibmc backend, and as of Django 1.11 also supports
thebinary,usernameandpasswordoptions natively. As such, in most
cases the built-in backend should be used instead of dj-pylibmc, since it
will be more actively maintained.To use Django’s own backend, configureCACHESlike so:CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    }
}See theDjango documentationfor details about using this cache backend.Reasons to use dj-pylibmc instead, are:You would like to use pylibmc’s compression featureYou would rather pylibmc connection/server exceptions be caught/logged and not raised
(though this may beadded upstreamsoon).Requirementsdj-pylibmc requires pylibmc 1.4.1 or above. It supports Django 2.2 through
3.1, and Python versions >=3.6, <3.9InstallationGet it frompypi:pip install dj-pylibmcorgithub:pip install -e git://github.com/RegioHelden/dj-pylibmc.git#egg=dj-pylibmcUsageYour cache backend should look something like this:CACHES = {
    'default': {
        'BACKEND': 'dj_pylibmc.memcached.PyLibMCCache',
        'LOCATION': 'localhost:11211',
        'TIMEOUT': 500,
        'BINARY': True,
        'OPTIONS': {  # Maps to pylibmc "behaviors"
            'tcp_nodelay': True,
            'ketama': True
        }
    }
}To use amemcached local socket connection,
setLOCATIONto the path to the file, i.e.'/var/run/memcached/memcached.sock'.If you want to use the memcached binary protocol, set theBINARYkey’s
value toTrueas shown above.BINARYisFalseby default.If you want to controlpylibmc behaviors, use theOPTIONS.OPTIONSis an empty dict by default.Pylibmc supportscompressionand the
minimum size (in bytes) of values to compress can be set via the Django
settingPYLIBMC_MIN_COMPRESS_LEN.  The default is0, which is disabled.Pylibmc 1.3.0 and above allows to configure compression level, which can
be set via the Django settingPYLIBMC_COMPRESS_LEVEL. It accepts the
same values as the Pythonzlibmodule. Please note that pylibmc changed the default from1(Z_BEST_SPEED)
to-1(Z_DEFAULT_COMPRESSION) in 1.3.0.Since 0.6.2 connections are long-living and not closed after each request. It could cause unwantedConnectionErrorsbeing raised by libmemcached when connection is broken. dj-pylibmc will make one more attempt
when a request to memcached fails with ConnectionError. If this behavior doesn’t fit your needs, it can be disabled
by settingDJPYLIBMC_RETRY_ON_BROKEN_CONNECTIONDjango setting to False.Configuration with Environment VariablesOptionally, the memcached connection can be configured with environment
variables (on platforms like Heroku). To do so, declare the following
variables:MEMCACHE_SERVERSMEMCACHE_USERNAMEMEMCACHE_PASSWORDCaching TimoutsWhen setting a cache value, memcache allows you to set an expiration for the
value. Commonly, the value is set to a timeout in seconds. However, other
values are allowed including Unix timestamps and 0 for “never expire”. The
highest number of seconds is 30 days - more than that, and the value is
treated like a timestamp.Django instead tries to work with cache timeouts in seconds after the current
time. 0 is treated as 0 seconds, meaning the item should expire immediately.
A timeout of None signals that the item should not expire. There is some
support for memcache-style Unix timestamps as well.In the distant past (Django 1.3?), a timeout of 0 was converted to the default
timeout.The current dj-pylibmc behaviour is to pass 0 to the backend, which should
be interpreted as “never expire”. Omiting the timeout will get the Django
default.In the future, dj-pylibmc will adopt the latest Django behaviour.
The safest solution for your own code is to omit the timeout parameter (and
get the default timeout), or set it to a timeout in seconds (less than 30
days). This way, your code will work when the Django behaviour is adopted.
Avoid using a timeout of 0, None, or a negative number.TestingInstalltox:pip install toxRun the tests like this:toxChangelog0.6.4 - 2020-11-30Correctly handles MemcachedError with no retcode attributeAdds black formatiingSupports Python 3.6 through 3.80.6.3 - 2020-10-21Makes retry on ConnectionErrorDrops support of old Python and Django versionSupports Django 2.2 through 3.1Supports Python 3.5 through 3.80.6.2 - 2020-10-16Supports Django 1.7 through 3.1Supports Python 2.7 through 3.80.6.1 - 2015-12-28Supports Django 1.7 through 1.11Supports Python 2.7, 3.4, and 3.50.6.0 - 2015-04-01Requires pylibmc 1.4.1 or greaterSupports Django 1.4 through 1.8.Supports Python 2.5 through 2.7, and Python 3.3 through 3.4In Django 1.6 and higher, when the timeout is omitted, the default
timeout is used, rather than set to “never expire”._(Older changes can be found in the full documentation)._