summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/internals/contributing/writing-code/unit-tests.txt7
-rw-r--r--docs/ref/settings.txt5
-rw-r--r--docs/releases/4.0.txt10
-rw-r--r--docs/spelling_wordlist1
-rw-r--r--docs/topics/cache.txt93
5 files changed, 110 insertions, 6 deletions
diff --git a/docs/internals/contributing/writing-code/unit-tests.txt b/docs/internals/contributing/writing-code/unit-tests.txt
index 6a5bd5ab8f..9bba72c451 100644
--- a/docs/internals/contributing/writing-code/unit-tests.txt
+++ b/docs/internals/contributing/writing-code/unit-tests.txt
@@ -285,6 +285,7 @@ dependencies:
* PyYAML_
* pytz_ (required)
* pywatchman_
+* redis_
* setuptools_
* memcached_, plus a :ref:`supported Python binding <memcached>`
* gettext_ (:ref:`gettext_on_windows`)
@@ -308,8 +309,9 @@ encounter.
You can also install the database adapter(s) of your choice using
``oracle.txt``, ``mysql.txt``, or ``postgres.txt``.
-If you want to test the memcached cache backend, you'll also need to define
-a :setting:`CACHES` setting that points at your memcached instance.
+If you want to test the memcached or Redis cache backends, you'll also need to
+define a :setting:`CACHES` setting that points at your memcached or Redis
+instance respectively.
To run the GeoDjango tests, you will need to :doc:`set up a spatial database
and install the Geospatial libraries</ref/contrib/gis/install/index>`.
@@ -332,6 +334,7 @@ service.
.. _PyYAML: https://pyyaml.org/wiki/PyYAML
.. _pytz: https://pypi.org/project/pytz/
.. _pywatchman: https://pypi.org/project/pywatchman/
+.. _redis: https://pypi.org/project/redis/
.. _setuptools: https://pypi.org/project/setuptools/
.. _memcached: https://memcached.org/
.. _gettext: https://www.gnu.org/software/gettext/manual/gettext.html
diff --git a/docs/ref/settings.txt b/docs/ref/settings.txt
index 12d89142d1..0c5b3fe307 100644
--- a/docs/ref/settings.txt
+++ b/docs/ref/settings.txt
@@ -153,6 +153,7 @@ The cache backend to use. The built-in cache backends are:
* ``'django.core.cache.backends.locmem.LocMemCache'``
* ``'django.core.cache.backends.memcached.PyMemcacheCache'``
* ``'django.core.cache.backends.memcached.PyLibMCCache'``
+* ``'django.core.cache.backends.redis.RedisCache'``
You can use a cache backend that doesn't ship with Django by setting
:setting:`BACKEND <CACHES-BACKEND>` to a fully-qualified path of a cache
@@ -162,6 +163,10 @@ backend class (i.e. ``mypackage.backends.whatever.WhateverCache``).
The ``PyMemcacheCache`` backend was added.
+.. versionchanged:: 4.0
+
+ The ``RedisCache`` backend was added.
+
.. setting:: CACHES-KEY_FUNCTION
``KEY_FUNCTION``
diff --git a/docs/releases/4.0.txt b/docs/releases/4.0.txt
index 709363a08f..540500af47 100644
--- a/docs/releases/4.0.txt
+++ b/docs/releases/4.0.txt
@@ -65,6 +65,16 @@ The new :ref:`scrypt password hasher <scrypt-usage>` is more secure and
recommended over PBKDF2. However, it's not the default as it requires OpenSSL
1.1+ and more memory.
+Redis cache backend
+-------------------
+
+The new ``django.core.cache.backends.redis.RedisCache`` cache backend provides
+built-in support for caching with Redis. `redis-py`_ 3.0.0 or higher is
+required. For more details, see the :ref:`documentation on caching with Redis
+in Django <redis>`.
+
+.. _`redis-py`: https://pypi.org/project/redis/
+
Minor features
--------------
diff --git a/docs/spelling_wordlist b/docs/spelling_wordlist
index bd8785cf67..8d9b17a43d 100644
--- a/docs/spelling_wordlist
+++ b/docs/spelling_wordlist
@@ -423,6 +423,7 @@ recomputation
recursed
redeclare
redirections
+redis
redisplay
redisplayed
redisplaying
diff --git a/docs/topics/cache.txt b/docs/topics/cache.txt
index 0f25260672..3bc35fd51d 100644
--- a/docs/topics/cache.txt
+++ b/docs/topics/cache.txt
@@ -62,7 +62,6 @@ settings file. Here's an explanation of all available values for
Memcached
---------
-The fastest, most efficient type of cache supported natively by Django,
Memcached__ is an entirely memory-based cache server, originally developed
to handle high loads at LiveJournal.com and subsequently open-sourced by
Danga Interactive. It is used by sites such as Facebook and Wikipedia to
@@ -169,6 +168,71 @@ particularly temporary.
some problems and seems to be unmaintained. Use ``PyMemcacheCache`` or
``PyLibMCCache`` instead.
+.. _redis:
+
+Redis
+-----
+
+.. versionadded:: 4.0
+
+Redis__ is an in-memory database that can be used for caching. To begin you'll
+need a Redis server running either locally or on a remote machine.
+
+__ https://redis.io/
+
+After setting up the Redis server, you'll need to install Python bindings for
+Redis. `redis-py`_ is the binding supported natively by Django. Installing the
+additional `hiredis-py`_ package is also recommended.
+
+.. _`redis-py`: https://pypi.org/project/redis/
+.. _`hiredis-py`: https://pypi.org/project/hiredis/
+
+To use Redis as your cache backend with Django:
+
+* Set :setting:`BACKEND <CACHES-BACKEND>` to
+ ``django.core.cache.backends.redis.RedisCache``.
+
+* Set :setting:`LOCATION <CACHES-LOCATION>` to the URL pointing to your Redis
+ instance, using the appropriate scheme. See the ``redis-py`` docs for
+ `details on the available schemes
+ <https://redis-py.readthedocs.io/en/stable/#redis.ConnectionPool.from_url>`_.
+
+For example, if Redis is running on localhost (127.0.0.1) port 6379::
+
+ CACHES = {
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.redis.RedisCache',
+ 'LOCATION': 'redis://127.0.0.1:6379',
+ }
+ }
+
+Often Redis servers are protected with authentication. In order to supply a
+username and password, add them in the ``LOCATION`` along with the URL::
+
+ CACHES = {
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.redis.RedisCache',
+ 'LOCATION': 'redis://username:password@127.0.0.1:6379',
+ }
+ }
+
+If you have multiple Redis servers set up in the replication mode, you can
+specify the servers either as a semicolon or comma delimited string, or as a
+list. While using multiple servers, write operations are performed on the first
+server (leader). Read operations are performed on the other servers (replicas)
+chosen at random::
+
+ CACHES = {
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.redis.RedisCache',
+ 'LOCATION': [
+ 'redis://127.0.0.1:6379', # leader
+ 'redis://127.0.0.1:6378', # read-replica 1
+ 'redis://127.0.0.1:6377', # read-replica 2
+ ],
+ }
+ }
+
.. _database-caching:
Database caching
@@ -422,9 +486,9 @@ behavior. These arguments are provided as additional keys in the
On some backends (``database`` in particular) this makes culling *much*
faster at the expense of more cache misses.
- Memcached backends pass the contents of :setting:`OPTIONS <CACHES-OPTIONS>`
- as keyword arguments to the client constructors, allowing for more advanced
- control of client behavior. For example usage, see below.
+ The Memcached and Redis backends pass the contents of :setting:`OPTIONS
+ <CACHES-OPTIONS>` as keyword arguments to the client constructors, allowing
+ for more advanced control of client behavior. For example usage, see below.
* :setting:`KEY_PREFIX <CACHES-KEY_PREFIX>`: A string that will be
automatically included (prepended by default) to all cache keys
@@ -496,6 +560,27 @@ flag on the connection's socket::
}
}
+Here's an example configuration for a ``redis`` based backend that selects
+database ``10`` (by default Redis ships with 16 logical databases), specifies a
+`parser class`_ (``redis.connection.HiredisParser`` will be used by default if
+the ``hiredis-py`` package is installed), and sets a custom `connection pool
+class`_ (``redis.ConnectionPool`` is used by default)::
+
+ CACHES = {
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.redis.RedisCache',
+ 'LOCATION': 'redis://127.0.0.1:6379',
+ 'OPTIONS': {
+ 'db': '10',
+ 'parser_class': 'redis.connection.PythonParser',
+ 'pool_class': 'redis.BlockingConnectionPool',
+ }
+ }
+ }
+
+.. _`parser class`: https://github.com/andymccurdy/redis-py#parsers
+.. _`connection pool class`: https://github.com/andymccurdy/redis-py#connection-pools
+
.. _the-per-site-cache:
The per-site cache