A Redis cache backend for django

Overview

Redis Django Cache Backend

Downloads Latest Version Travis-ci Build

A Redis cache backend for Django

Docs can be found at http://django-redis-cache.readthedocs.org/en/latest/.

Changelog

3.0.0

  • Adds support for Python 3.8
  • Drops support for Python 2.X and Python 3.5
  • Drops support for Django < 3.0

2.1.2

  • Confirms support for Django 3.1 (no code changes required).

2.1.1

  • Fixes URL scheme for rediss://.

2.1.0

  • Adds support for Django 3.0.

2.0.0

  • Adds support for redis-py >= 3.0.
  • Drops support for Redis 2.6.
  • Drops support for Python 3.4.
  • Removes custom expire method in lieu of Django's touch.
  • Removes CacheKey in favor of string literals.
  • Adds testing for Django 2.2 and Python 3.7 (no code changes required).

1.8.0

  • Confirms support for Django 1.11, 2.0, and 2.1 (no code changes required).
  • Drops support for Django < 1.11.

1.7.1

  • Confirms support for Django 1.9 and 1.10.

1.7.0

  • Drops support for Django < 1.8 and Python 3.2.

1.6.4

  • Adds a default timeout to set_many.

1.6.3

  • Fixes get_many and set_many to work with empty parameters.

1.6.2

  • Fixes set_many to set cache key version.

1.6.1

  • Allows delete_many to fail silently with an empty list.

1.6.0

  • Adds dummy cache.

1.5.5

  • Cleans up get_or_set.

1.5.4

  • Updates importlib import statement for better Django 1.9 compatibility.

1.5.3

  • Adds initial documentation.
  • Updates function signatures to use DEFAULT_TIMEOUT.
  • Fixes issue with redis urls and unix_socket_path key error.

1.5.2

  • Adds SOCKET_CONNECT_TIMEOUT option.

1.5.1

  • Refactors class importing.

1.5.0

  • Adds ability to compress/decompress cache values using pluggable compressors

including zlib, bzip2, or a custom implementation.

1.4.0

  • Adds support for providing a socket timeout on the redis-py client.

1.3.0

  • Adds support for pluggable serializers including pickle(default), json,

msgpack, and yaml.

1.2.0

  • Deprecate support for Python 2.6. The cache should still work, but tests

will fail and compatibility will not be guaranteed going forward.

Backward incompatibilities:

  • The HashRing behavior has changed to maintain a proper keyspace balance.

This will lead to some cache misses, so be aware.

1.0.0

  • Deprecate support for django < 1.3 and redis < 2.4. If you need support for those versions,
    pin django-redis-cache to a version less than 1.0, i.e. pip install django-redis-cache<1.0
  • Application level sharding when a list of locations is provided in the settings.
  • Delete keys using wildcard syntax.
  • Clear cache using version to delete only keys under that namespace.
  • Ability to select pickle protocol version.
  • Support for Master-Slave setup
  • Thundering herd protection
  • Add expiration to key using expire command.
  • Add persistence to key using persist command.

0.13.0

  • Adds custom has_key implementation that uses Redis's exists command.
    This will speed has_key up drastically if the key under question is extremely large.

0.12.0

  • Keys can now be kept alive indefinitely by setting the timeout to None,
    e.g. cache.set('key', 'value', timeout=None)
  • Adds ttl method to the cache. cache.ttl(key) will return the number of
    seconds before it expires or None if the key is not volatile.

0.11.0

  • Adds support for specifying the connection pool class.
  • Adds ability to set the max connections for the connection pool.

0.10.0

Adds Support for Python 3.3 and Django 1.5 and 1.6. Huge thanks to Carl Meyer for his work.

0.9.0

Redis cache now allows you to use either a TCP connection or Unix domain socket to connect to your redis server. Using a TCP connection is useful for when you have your redis server separate from your app server and/or within a distributed environment. Unix domain sockets are useful if you have your redis server and application running on the same machine and want the fastest possible connection.

You can now specify (optionally) what parser class you want redis-py to use when parsing messages from the redis server. redis-py will pick the best parser for you implicitly, but using the PARSER_CLASS setting gives you control and the option to roll your own parser class if you are so bold.

Requirements

redis-py >= 2.10.3 redis >= 2.4 hiredis python >= 2.7

  1. Run pip install django-redis-cache.
  2. Modify your Django settings to use redis_cache.
# When using TCP connections
CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': [
            '<host>:<port>',
            '<host>:<port>',
            '<host>:<port>',
        ],
        'OPTIONS': {
            'DB': 1,
            'PASSWORD': 'yadayada',
            'PARSER_CLASS': 'redis.connection.HiredisParser',
            'CONNECTION_POOL_CLASS': 'redis.BlockingConnectionPool',
            'CONNECTION_POOL_CLASS_KWARGS': {
                'max_connections': 50,
                'timeout': 20,
            },
            'MAX_CONNECTIONS': 1000,
            'PICKLE_VERSION': -1,
        },
    },
}

# When using unix domain sockets
# Note: ``LOCATION`` needs to be the same as the ``unixsocket`` setting
# in your redis.conf
CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': '/path/to/socket/file',
        'OPTIONS': {
            'DB': 1,
            'PASSWORD': 'yadayada',
            'PARSER_CLASS': 'redis.connection.HiredisParser',
            'PICKLE_VERSION': 2,
        },
    },
}

# For Master-Slave Setup, specify the host:port of the master
# redis-server instance.
CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': [
            '<host>:<port>',
            '<host>:<port>',
            '<host>:<port>',
        ],
        'OPTIONS': {
            'DB': 1,
            'PASSWORD': 'yadayada',
            'PARSER_CLASS': 'redis.connection.HiredisParser',
            'PICKLE_VERSION': 2,
            'MASTER_CACHE': '<master host>:<master port>',
        },
    },
}

Usage

django-redis-cache shares the same API as django's built-in cache backends, with a few exceptions.

cache.delete_pattern

Delete keys using glob-style pattern.

example:

>>> from news.models import Story
>>>
>>> most_viewed = Story.objects.most_viewed()
>>> highest_rated = Story.objects.highest_rated()
>>> cache.set('news.stories.most_viewed', most_viewed)
>>> cache.set('news.stories.highest_rated', highest_rated)
>>> data = cache.get_many(['news.stories.highest_rated', 'news.stories.most_viewed'])
>>> len(data)
2
>>> cache.delete_pattern('news.stores.*')
>>> data = cache.get_many(['news.stories.highest_rated', 'news.stories.most_viewed'])
>>> len(data)
0

cache.clear

Same as django's cache.clear, except that you can optionally specify a version and all keys with that version will be deleted. If no version is provided, all keys are flushed from the cache.

cache.reinsert_keys

This helper method retrieves all keys and inserts them back into the cache. This is useful when changing the pickle protocol number of all the cache entries. As of django-redis-cache < 1.0, all cache entries were pickled using version 0. To reduce the memory footprint of the redis-server, simply run this method to upgrade cache entries to the latest protocol.

Thundering Herd Protection

A common problem with caching is that you can sometimes get into a situation where you have a value that takes a long time to compute or retrieve, but have clients accessing it a lot. For example, if you wanted to retrieve the latest tweets from the twitter api, you probably want to cache the response for a number of minutes so you don't exceed your rate limit. However, when the cache entry expires you can have mulitple clients that see there is no entry and try to simultaneously fetch the latest results from the api.

The way to get around this problem you pass in a callable and timeout to get_or_set, which will check the cache to see if you need to compute the value. If it does, then the cache sets a placeholder that tells future clients to serve data from the stale cache until the new value is created.

Example:

tweets = cache.get_or_set('tweets', twitter.get_newest, timeout=300)

Running Tests

./install_redis.sh

make test

Comments
  • Getting InvalidCacheBackendError

    Getting InvalidCacheBackendError

    I have a new project where is installed redis-cache from scratch using pip, so i have version 0.9.2. my redis-py install is also fresh; 2.4.11, django is 1.3.1. I have setup Redis cache as follows:

    INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    
    # tools
    'south',
    'epio_commands',
    'raven.contrib.django',
    'debug_toolbar',
    'redis_cache',
    'feincms',
    'feincms.module.page',
    'feincms.module.medialibrary',
    
    # main app
    'core',
    )
    
    CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': '{host}:{port}'.format(
                host=config['redis']['host'],
                port=int(config['redis']['port'])
        ),
        'OPTIONS': {
            'PASSWORD': config['redis']['password'],
            'MAX_ENTRIES': 10000
        },
        'VERSION': config['core']['version'],
        'TIMEOUT': 3600*8 # 8 hours
    },
    }
    

    The weird thing is that while this setup works perfectly in other projects in this project i get the following error:

    File "/Users/tijs/.virtualenvs/swov/lib/python2.7/site-packages/django/core/cache/__init__.py", line 179, in get_cache
    "Could not find backend '%s': %s" % (backend, e))
    django.core.cache.backends.base.InvalidCacheBackendError: Could not find backend 'redis_cache.RedisCache': 'module' object has no attribute 'RedisCache'
    

    The full stacktrace is here: http://pastebin.com/butH6Jup

    opened by tijs 13
  • Master/Slave KeyError: 'unix_socket_path'

    Master/Slave KeyError: 'unix_socket_path'

    I'm suddenly getting an error when running master/slave setup.

    web_1 | [Wed Jul 22 19:53:18.569499 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/sonofatailorapp/config/urls.py", line 22, in <module>
    web_1 | [Wed Jul 22 19:53:18.569539 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     url(r'^giftcard/(?P<slug>[\\w-]+)?', cache_page(60 * 15)(GiftcardView.as_view())),
    web_1 | [Wed Jul 22 19:53:18.569543 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/django/views/decorators/cache.py", line 35, in cache_page
    web_1 | [Wed Jul 22 19:53:18.569556 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     cache_timeout=cache_timeout, cache_alias=cache_alias, key_prefix=key_prefix
    web_1 | [Wed Jul 22 19:53:18.569559 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/django/utils/decorators.py", line 96, in _make_decorator
    web_1 | [Wed Jul 22 19:53:18.569569 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     middleware = middleware_class(*m_args, **m_kwargs)
    web_1 | [Wed Jul 22 19:53:18.569572 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/django/middleware/cache.py", line 181, in __init__
    web_1 | [Wed Jul 22 19:53:18.569581 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     self.cache = caches[self.cache_alias]
    web_1 | [Wed Jul 22 19:53:18.569584 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/django/core/cache/__init__.py", line 113, in __getitem__
    web_1 | [Wed Jul 22 19:53:18.569594 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     cache = _create_cache(alias)
    web_1 | [Wed Jul 22 19:53:18.569597 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/django/core/cache/__init__.py", line 88, in _create_cache
    web_1 | [Wed Jul 22 19:53:18.569605 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     return backend_cls(location, params)
    web_1 | [Wed Jul 22 19:53:18.569608 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/redis_cache/backends/single.py", line 23, in __init__
    web_1 | [Wed Jul 22 19:53:18.569619 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     self.master_client = self.get_master_client()
    web_1 | [Wed Jul 22 19:53:18.569621 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/redis_cache/backends/base.py", line 148, in get_master_client
    web_1 | [Wed Jul 22 19:53:18.569631 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     kwargs['unix_socket_path'],
    web_1 | [Wed Jul 22 19:53:18.569640 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040] KeyError: 'unix_socket_path'
    

    My config looks like this for docker-compose

    CACHES = {
        'default': {
            'BACKEND': 'redis_cache.RedisCache',
            'LOCATION': [
                'redis://redis-slave'
            ],
            'OPTIONS': {
                'DB': 1,
                'PARSER_CLASS': 'redis.connection.HiredisParser',
                'PICKLE_VERSION': 2,
                'MASTER_CACHE': 'redis://redis-master',
            },
        },
    }
    

    and like this in kubernetes

    CACHES = {
        'default': {
            'BACKEND': 'redis_cache.RedisCache',
            'LOCATION': [
                'redis-slave:6379'
            ],
            'OPTIONS': {
                'DB': 1,
                'PARSER_CLASS': 'redis.connection.HiredisParser',
                'PICKLE_VERSION': 2,
                'MASTER_CACHE': 'redis-master:6379',
            },
        },
    }
    

    It yields the same error, so i'm suspecting, somethings changed either in this library or in one of it's dependencies.

    I'm using django 1.8 and and this config works fine

    CACHES = {
        'default': {
            'BACKEND': 'redis_cache.RedisCache',
            'LOCATION': [
                'redis://redis-master'
            ],
            'OPTIONS': {
                'DB': 1,
                'PARSER_CLASS': 'redis.connection.HiredisParser',
                'CONNECTION_POOL_CLASS': 'redis.BlockingConnectionPool',
                'CONNECTION_POOL_CLASS_KWARGS': {
                    'max_connections': 50,
                    'timeout': 20,
                },
                'MAX_CONNECTIONS': 1000,
                'PICKLE_VERSION': -1,
            },
        },
    }
    

    when i remove cache_page from my urls.py file it also seems to work again. It all worked, but now suddenly it doesn't. Have anyone had the same experience ?

    opened by jakobholmelund 12
  • Support incr/decr for Django >= 1.3

    Support incr/decr for Django >= 1.3

    Since redis has incrby, it seems crazy to let Django's default get-inc-set get in the way.

    def incr(self, key, delta=1, version=None):
        key = self.make_key(key, version)
        return self._cache.incrby(key, delta)
    

    or possibly with the return value wrapped in self.unpickle.

    The downside would be that behaviour wrt unset keys is changed (and can't be emulated perfectly without losing the atomicity of incrby). I for one would happily pay that price though, since the majority of use of incr wants a default of 0 anyway.

    opened by jaylett 8
  • Strings with numeric values get cast to ints.

    Strings with numeric values get cast to ints.

    >>> from django.core.cache import cache
    >>> cache
    <redis_cache.cache.RedisCache object at 0x1abaa50>
    >>> cache.set("foo", "1")
    True
    >>> cache.get("foo")
    1
    >>> cache.get("foo") == "1"
    False
    

    It's hard to say if this is a bug or not. #27 seems to indicate it's intentional. There's also a unit test for floats that explicitly tests that this behaviour occurs.

    If it's intentional a great big warning at the start of the README would probably be useful. Happy to write one if you'd like.

    opened by stephenmcd 7
  • Facing issue __init__() got an unexpected keyword argument 'connection_class'.

    Facing issue __init__() got an unexpected keyword argument 'connection_class'.

    I am configuring redis cache in django setting using format given in document for SSL connection. rediss://[:password]@localhost:6379/0

    But i am facing issue init() got an unexpected keyword argument 'connection_class'

    When i see the traceback i find 'connection_class': <class 'redis.connection.SSLConnection'> value in kwargs in redis_cache/backends/base.py in create_client line number 182.

    Kindly assist, setting up redis connection is the major thing in my project.

    opened by NirmalVatsyayan 6
  • django.core.exceptions.ImproperlyConfigured:

    django.core.exceptions.ImproperlyConfigured: "server" must be an iterable or string

    When I pass a value of "server" that is type unicode instead of str I get:

      File "/Users/Mike_Edwards/.virtualenvs/emojicatch/lib/python2.7/site-packages/redis_cache/backends/base.py", line 84, in get_servers
        '"server" must be an iterable or string'
    django.core.exceptions.ImproperlyConfigured: "server" must be an iterable or string
    

    More specifically, the django-environ app is what's passing the value in as unicode but it seems like that should work either way.

    It looks as though a recent change to get_servers uses isinstance narrowly and only allows values that are type str: https://github.com/sebleier/django-redis-cache/commit/f88925a17d5ac7316945b908e8be0e4e6158600c#diff-8fc3ae3ff1cb89b2f4ba473a41661d77R78

    I'm using: python 2.7.6 Django 1.8.2 django-environ 0.3.0

    opened by mikeedwards 6
  • Version mismatch between PyPI and your master

    Version mismatch between PyPI and your master

    I noticed the code here on github contains the cache.delete_pattern code and the code on PyPI doesn't, but both have version 0.9.5. Not a huge deal but had me confused for a while when i tried to "pip freeze > dependances" and "pip install -r dependancies" on my server.

    Would you mind bumping the version number on master?

    opened by timothypage 6
  • Documentation: default values for configuration options

    Documentation: default values for configuration options

    In the documentation configuration options are described, but one thing is missing: default values for each option, which are used, when option is not set.

    For example it's not clear, whether any connection pool is used by default and which one? I can open sources and investigate this, but it's much more convenient to have this described in the documentation.

    opened by devoto13 5
  • support for read vs write replicas

    support for read vs write replicas

    first off, thanks for django-redis-cache, we love it!

    we have a feature request: we'd love to use a redis replication group with both read only and read/write replicas. any chance you could support that in the future? i'm guessing we'd either provide multiple django cache backends with well-known names, or we'd specify the read vs write endpoints in OPTIONS, and you'd pick the right one for each cache operation. or however you want!

    (related to #3 and #31, but not the same.)

    thanks in advance!

    opened by snarfed 5
  • Handle wildcard deletion of keys

    Handle wildcard deletion of keys

    Redis allows us to find glob-style wildcard-matching keys with the use of the KEYS command[0]

    assuming keys 'apple', 'banana', 'boat':

    redis 127.0.0.1:6379> keys *
    1) "apple"
    2) "banana"
    3) "boat"
    redis 127.0.0.1:6379> keys a*
    1) "apple"
    

    It would be interesting to be able to do something like

    cache.delete_wildcard("a*")
    

    and other similar operations.

    Cheers!

    [0] http://redis.io/commands/keys

    opened by airstrike 5
  • RemovedInDjango19Warning

    RemovedInDjango19Warning

    I'm getting the following warning:

    /Users/xxxx/.virtualenvs/xxxxx/lib/python2.7/site-packages/redis_cache/cache.py:3: RemovedInDjango19Warning: django.utils.importlib will be removed in Django 1.9.
      from django.utils import importlib
    
    opened by epicserve 4
  • Support for redis-py 4.x?

    Support for redis-py 4.x?

    redis-py 4.0.0 was released Nov 15, 2021, now at 4.2.2, but I can't upgrade it because this module requires <4.0:

    ERROR: Cannot install -r requirements.txt (line 29) and redis==4.2.2 because these package versions have conflicting dependencies.
    
    The conflict is caused by:
        The user requested redis==4.2.2
        django-redis-cache 3.0.1 depends on redis<4.0
    

    I know that Django 4.0 has a new built-in redis cache, but I'm not upgrading from 3.2 LTS until 4.2 LTS is released next year. Any word on updating this package to allow continued support of redis-py?

    Thanks! Nate

    opened by nshafer 0
  • Security Vulnerabilities in 3.0.0

    Security Vulnerabilities in 3.0.0

    During routine dependency maintenance, my dependency-check report flagged this module as having two high-priority security vulnerabilities. The vulnerabilities were noted were this one and this one. As you can see, the second link didn't actually return any results - I'm not sure if it was a false positive or if it's real but didn't create the correct link.

    We have the latest released version, so we can't address the vulnerability ourselves. If someone could address this issue, it'd be greatly appreciated!

    Screen Shot 2022-01-03 at 9 31 22 AM
    opened by greg-dixon 0
  • KeyError: 'BACKEND'

    KeyError: 'BACKEND'

    When I enabled django-redis-cache I got this error:

     ./manage.py check                            
    
    Traceback (most recent call last):
      File "./manage.py", line 21, in <module>
        main()
      File "./manage.py", line 17, in main
        execute_from_command_line(sys.argv)
      File "---.venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
        utility.execute()
      File "---/.venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "---/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv
        self.execute(*args, **cmd_options)
      File "----/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute
        output = self.handle(*args, **options)
      File "--/.venv/lib/python3.8/site-packages/django/core/management/commands/check.py", line 63, in handle
        self.check(
      File "---/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 419, in check
        all_issues = checks.run_checks(
      File "--/.venv/lib/python3.8/site-packages/django/core/checks/registry.py", line 76, in run_checks
        new_errors = check(app_configs=app_configs, databases=databases)
      File "---/.venv/lib/python3.8/site-packages/django/core/checks/caches.py", line 63, in check_file_based_cache_is_absolute
        cache = caches[alias]
      File "---/.venv/lib/python3.8/site-packages/django/utils/connection.py", line 62, in __getitem__
        conn = self.create_connection(alias)
      File "---/.venv/lib/python3.8/site-packages/django/core/cache/__init__.py", line 36, in create_connection
        backend = params.pop('BACKEND')
    KeyError: 'BACKEND'
    
    
    

    settings.py:

    CACHES = {
        'default': {
            'BACKEND': 'redis_cache.RedisCache',
            'LOCATION': 'localhost:6379',
        },
        'OPTIONS': {
            'DB': 11,
        }
    }
    

    I am using 0.6.2

    opened by pyprism 0
  • Bump pyyaml from 5.3.1 to 5.4

    Bump pyyaml from 5.3.1 to 5.4

    Bumps pyyaml from 5.3.1 to 5.4.

    Changelog

    Sourced from pyyaml's changelog.

    5.4 (2021-01-19)

    Commits
    • 58d0cb7 5.4 release
    • a60f7a1 Fix compatibility with Jython
    • ee98abd Run CI on PR base branch changes
    • ddf2033 constructor.timezone: _copy & deepcopy
    • fc914d5 Avoid repeatedly appending to yaml_implicit_resolvers
    • a001f27 Fix for CVE-2020-14343
    • fe15062 Add 3.9 to appveyor file for completeness sake
    • 1e1c7fb Add a newline character to end of pyproject.toml
    • 0b6b7d6 Start sentences and phrases for capital letters
    • c976915 Shell code improvements
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
An ORM cache for Django.

Django ORMCache A cache manager mixin that provides some caching of objects for the ORM. Installation / Setup / Usage TODO Testing Run the tests with:

Educreations, Inc 15 Nov 27, 2022
johnny cache django caching framework

Johnny Cache is a caching framework for django applications. It works with the django caching abstraction, but was developed specifically with the use

Jason Moiron 304 Nov 7, 2022
A slick ORM cache with automatic granular event-driven invalidation.

Cacheops A slick app that supports automatic or manual queryset caching and automatic granular event-driven invalidation. It uses redis as backend for

Alexander Schepanovski 1.7k Dec 30, 2022
Automatic Flask cache configuration on Heroku.

flask-heroku-cacheify Automatic Flask cache configuration on Heroku. Purpose Configuring your cache on Heroku can be a time sink. There are lots of di

Randall Degges 39 Jun 5, 2022
RecRoom Library Cache Tool

RecRoom Library Cache Tool A handy tool to deal with the Library cache file. Features Parse Library cache Remove Library cache Parsing The script pars

Jesse 5 Jul 9, 2022
Peerix is a peer-to-peer binary cache for nix derivations

Peerix Peerix is a peer-to-peer binary cache for nix derivations. Every participating node can pull derivations from each other instances' respective

null 92 Dec 13, 2022
Robust, highly tunable and easy-to-integrate in-memory cache solution written in pure Python, with no dependencies.

Omoide Cache Caching doesn't need to be hard anymore. With just a few lines of code Omoide Cache will instantly bring your Python services to the next

Leo Ertuna 2 Aug 14, 2022
Automatic caching and invalidation for Django models through the ORM.

Cache Machine Cache Machine provides automatic caching and invalidation for Django models through the ORM. For full docs, see https://cache-machine.re

null 846 Nov 26, 2022
An implementation of memoization technique for Django

django-memoize django-memoize is an implementation of memoization technique for Django. You can think of it as a cache for function or method results.

Unhaggle 118 Dec 9, 2022
A Redis cache backend for django

Redis Django Cache Backend A Redis cache backend for Django Docs can be found at http://django-redis-cache.readthedocs.org/en/latest/. Changelog 3.0.0

Sean Bleier 1k Dec 15, 2022
Full featured redis cache backend for Django.

Redis cache backend for Django This is a Jazzband project. By contributing you agree to abide by the Contributor Code of Conduct and follow the guidel

Jazzband 2.5k Jan 3, 2023
A Redis cache backend for django

Redis Django Cache Backend A Redis cache backend for Django Docs can be found at http://django-redis-cache.readthedocs.org/en/latest/. Changelog 3.0.0

Sean Bleier 1k Dec 15, 2022
Cache-house - Caching tool for python, working with Redis single instance and Redis cluster mode

Caching tool for python, working with Redis single instance and Redis cluster mo

Tural 14 Jan 6, 2022
Django package to log request values such as device, IP address, user CPU time, system CPU time, No of queries, SQL time, no of cache calls, missing, setting data cache calls for a particular URL with a basic UI.

django-web-profiler's documentation: Introduction: django-web-profiler is a django profiling tool which logs, stores debug toolbar statistics and also

MicroPyramid 77 Oct 29, 2022
Python disk-backed cache (Django-compatible). Faster than Redis and Memcached. Pure-Python.

DiskCache is an Apache2 licensed disk and file backed cache library, written in pure-Python, and compatible with Django.

Grant Jenks 1.7k Jan 5, 2023
Jira-cache - Jira cache with python

Direct queries to Jira have two issues: they are sloooooow many queries are impo

John Scott 6 Oct 8, 2022
Django-gmailapi-json-backend - Email backend for Django which sends email via the Gmail API through a JSON credential

django-gmailapi-json-backend Email backend for Django which sends email via the

Innove 1 Sep 9, 2022
Backend Boilerplate using Django,celery,Redis

Backend Boilerplate using Django,celery,Redis

Daniel Mawioo 2 Sep 14, 2022
Interactive Redis: A Terminal Client for Redis with AutoCompletion and Syntax Highlighting.

Interactive Redis: A Cli for Redis with AutoCompletion and Syntax Highlighting. IRedis is a terminal client for redis with auto-completion and syntax

null 2.2k Dec 29, 2022
Python cluster client for the official redis cluster. Redis 3.0+.

redis-py-cluster This client provides a client for redis cluster that was added in redis 3.0. This project is a port of redis-rb-cluster by antirez, w

Grokzen 1.1k Jan 5, 2023