summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/releases/1.9.txt3
-rw-r--r--docs/topics/cache.txt19
2 files changed, 21 insertions, 1 deletions
diff --git a/docs/releases/1.9.txt b/docs/releases/1.9.txt
index e8dd955e29..1be30ae561 100644
--- a/docs/releases/1.9.txt
+++ b/docs/releases/1.9.txt
@@ -94,7 +94,8 @@ Minor features
Cache
^^^^^
-* ...
+* ``django.core.cache.backends.base.BaseCache`` now has a ``get_or_set()``
+ method.
Email
^^^^^
diff --git a/docs/topics/cache.txt b/docs/topics/cache.txt
index 94a97d5b0e..69656534e6 100644
--- a/docs/topics/cache.txt
+++ b/docs/topics/cache.txt
@@ -778,6 +778,25 @@ If you need to know whether ``add()`` stored a value in the cache, you can
check the return value. It will return ``True`` if the value was stored,
``False`` otherwise.
+If you want to get a key's value or set a value if the key isn't in the cache,
+there is the ``get_or_set()`` method. It takes the same parameters as ``get()``
+but the default is set as the new cache value for that key, rather than simply
+returned::
+
+ >>> cache.get('my_new_key') # returns None
+ >>> cache.get_or_set('my_new_key', 'my new value', 100)
+ 'my new value'
+
+You can also pass any callable as a *default* value::
+
+ >>> import datetime
+ >>> cache.get_or_set('some-timestamp-key', datetime.datetime.now)
+ datetime.datetime(2014, 12, 11, 0, 15, 49, 457920)
+
+.. versionchanged:: 1.9
+
+ The ``get_or_set()`` method was added.
+
There's also a ``get_many()`` interface that only hits the cache once.
``get_many()`` returns a dictionary with all the keys you asked for that
actually exist in the cache (and haven't expired)::