我有Django,PostgreSQL和Redis。我有具有外键和m2m关系的模型。每天我都会缓存一堆对象,并在午夜时分放下缓存。问题是当我从数据库中删除对象时(白天) - 缓存中的关系字段也发生了变化(这些对象的id从外键和m2m中删除)。正如我在Redis文档中所读到的 - 所有对象都以散列形式存储在服务器的RAM中。我无法理解数据库更改如何影响RAM缓存。那么为什么会发生这种情况,我该如何防止这种行为?为什么如果相关对象从数据库中删除,Redis会删除对象中的关系?
例子:
# Model
class Item(models.Model):
...
places = models.ManyToManyField(Place, verbose_name=_('Places'), related_name='items', null=True, blank=True)
# In view
items = Item.objects.all()
cache.set(key, items, None)
然后在Django管理我删除的地方之一,并在外壳我得到缓存的项目:
items = cache.get(key)
和手动检查检索到的项目的地方 - 该地点已从所有相关项目中删除。这不好。
您没有提供足够的细节。你到底在做什么? – 2015-03-14 03:47:12
感谢您的评论。我已经更新了这个问题。 – Gleb 2015-03-16 07:59:32