#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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
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.

Reply via email to