Skip to main content
Archived

This project has been archived by its maintainers, and is no longer receiving any updates.

This package provides a memcached cache backend for Django using pylibmc. You want to use pylibmc because it’s fast.

This is a fork of the django-pylibmc package.

Do you need dj-pylibmc?

Django now has a built-in pylibmc backend, and as of Django 1.11 also supports the binary, username and password options 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, configure CACHES like so:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

See the Django documentation for details about using this cache backend.

Reasons to use dj-pylibmc instead, are:

  • You would like to use pylibmc’s compression feature

  • You would rather pylibmc connection/server exceptions be caught/logged and not raised (though this may be added upstream soon).

  • You’re using Django <1.11 and need to:

    • use the binary protocol.

    • use a username and password to access the memcached server (such as with Memcachier on Heroku).

Requirements

dj-pylibmc requires pylibmc 1.4.1 or above. It supports Django 1.8 through 3.1, and Python versions 2.7, 3.4, 3.5, 3.6, 3.7 and 3.8

Installation

Get it from pypi:

pip install dj-pylibmc

or github:

pip install -e git://github.com/RegioHelden/dj-pylibmc.git#egg=dj-pylibmc

Usage

Your 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 a memcached local socket connection, set LOCATION to the path to the file, i.e. '/var/run/memcached/memcached.sock'.

If you want to use the memcached binary protocol, set the BINARY key’s value to True as shown above. BINARY is False by default.

If you want to control pylibmc behaviors, use the OPTIONS. OPTIONS is an empty dict by default.

Pylibmc supports compression and the minimum size (in bytes) of values to compress can be set via the Django setting PYLIBMC_MIN_COMPRESS_LEN. The default is 0, which is disabled.

Pylibmc 1.3.0 and above allows to configure compression level, which can be set via the Django setting PYLIBMC_COMPRESS_LEVEL. It accepts the same values as the Python zlib module. Please note that pylibmc changed the default from 1 (Z_BEST_SPEED) to -1 (Z_DEFAULT_COMPRESSION) in 1.3.0.

Configuration with Environment Variables

Optionally, the memcached connection can be configured with environment variables (on platforms like Heroku). To do so, declare the following variables:

  • MEMCACHE_SERVERS

  • MEMCACHE_USERNAME

  • MEMCACHE_PASSWORD

Caching Timouts

When 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.

Testing

Install tox:

pip install tox

Run the tests like this:

tox

Changelog

0.6.2 - 2020-10-16

  • Supports Django 1.7 through 3.1

  • Supports Python 2.7 through 3.8

0.6.1 - 2015-12-28

  • Supports Django 1.7 through 1.11

  • Supports Python 2.7, 3.4, and 3.5

0.6.0 - 2015-04-01

  • Requires pylibmc 1.4.1 or greater

  • Supports Django 1.4 through 1.8.

  • Supports Python 2.5 through 2.7, and Python 3.3 through 3.4

  • In 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)._

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dj-pylibmc-0.6.2.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dj_pylibmc-0.6.2-py2.py3-none-any.whl (6.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file dj-pylibmc-0.6.2.tar.gz.

File metadata

  • Download URL: dj-pylibmc-0.6.2.tar.gz
  • Upload date:
  • Size: 15.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

File hashes

Hashes for dj-pylibmc-0.6.2.tar.gz
Algorithm Hash digest
SHA256 e3347b33bb3be479a4981dbdf4f523e3c43b67b8c9493ec976aab5a51af1df25
MD5 b67553cc95341c9b8e73dffea5399686
BLAKE2b-256 b0f974913a8e9d7a0622333e46b4fe95a71f5c3e96232a911cf6162c3e031c48

See more details on using hashes here.

File details

Details for the file dj_pylibmc-0.6.2-py2.py3-none-any.whl.

File metadata

  • Download URL: dj_pylibmc-0.6.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

File hashes

Hashes for dj_pylibmc-0.6.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 0f5bb3e1696fdaca7d548b837c236b12e62fee77e67d040012fc7fd69ab81e32
MD5 413eaba93eb8726613c24c7abbc1059a
BLAKE2b-256 e13eff1d0c847ebfa2eff37567c38f2b53732c3098f75dff64ff82169105ca22

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page