#24402: Missing support for rollback in django.core.cache
-------------------------------------+--------------------
Reporter: Tuttle | Owner: nobody
Type: New feature | Status: new
Component: Core (Cache system) | Version:
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+--------------------
Tried unsuccessfully to find existing ticket for this, so starting an idea
discussion.
In my project, I use `memcached` via `django.core.cache` to cache data
resulting from some ORM operations. But when the database rolls back, the
memcache is kept in the wrong state.
Currently I'm adding another layer with local dict (which has some speed
improvements effects):
{{{#!python
class DeferredMemcache(object):
def __init__(self):
from django.core import cache # Importing this way so
debug_toolbar can patch it later.
self.real_cache = cache.cache
self.local_cache = {}
def get(self, key, default=None):
try:
value, deadline = self.local_cache[key]
except KeyError:
return self.real_cache.get(key, default)
else:
return value if deadline > time.time() else default
def set(self, key, value, timeout):
assert timeout > 0
self.local_cache[key] = value, timeout + time.time()
def commit(self):
for key, (value, deadline) in self.local_cache.iteritems():
timeout = deadline - time.time()
if timeout >= 0:
self.real_cache.set(key, value, timeout)
self.local_cache.clear()
}}}
What do you think about adding some support for cache rollback in Django?
--
Ticket URL: <https://code.djangoproject.com/ticket/24402>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/049.341add49f1b9c2ae6cd7f2d9ae7149e6%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.