在使用子对象更新和检索模型实例时,如何在Django中使用memcache?

萨奇布·阿里(Saqib Ali)

我有一个现有的Django应用,不执行任何数据库缓存。我正在努力实现memcached,以提高性能并减少昂贵的数据库命中次数。

到目前为止,我已经在服务器上安装并正在运行memcache,已安装pymclibdjango-memcache-admin并按照此处所述修改了settings.py文件我尚未修改任何实际的应用程序代码。但是当我查看django-memcache-admin仪表板时,仍然可以看到缓存正在生效。缓存也很明显,因为当我加载某些视图时,显示的数据已过时。IE:更新的数据未进入缓存。我需要有关如何解决此问题的建议。下面给出更详细的解释。

这是我的模型:

class myObjectA(models.Model):  
    field1 = models.CharField(max_length=255)

    def modify(self):
        newB = myObjectB(fk_myObjectA=self, field2="Blah Blah")
        newB.save()

    def getBChildren(self):
        return myObjectB.objects.filter(fk_myObjectA=self)


class myObjectB(models.Model):  
    fk_myObjectA = models.ForeignKey(myObjectA, related_name="Blah_Blah") 
    field2 = models.CharField(max_length=255)

这是网址路径:

url(
    r'^api/myObjectA_Modify/(?P<myObjectA_ID>\d+)/?$', 
    myObjectA_Modify.as_view()
),

这是通过添加新的myObjectB子记录来修改myObjectA实例的API视图:

class myObjectA_Modify(mixins.UpdateModelMixin, generics.GenericAPIView):
    queryset = myObjectA.objects.all()
    serializer_class = myObjectA_Serializer   

    def put(self, request, *args, **kwargs):

        retrieved_myObjectA = get_object_or_404(
            myObjectA, 
            pk=request.POST["myObjectA_ID"],
        )

        retrieved_myObjectA.modify()

        return Response(
            myObjectA_Serializer(retrieved_myObjectA.getBChildren()).data,
            status=status.HTTP_200_OK,
        )

对myObjectA_Modify的调用可以具有任何任意ID。我事先不知道将使用哪个ID。myObjectA可以具有不确定数量的myObjectB子级。此外,还有其他单独的API可返回所有myObjectAs和myObjectB的完整列表。

如何修改此应用程序代码以与Memcache配合使用?我的插入键应该是什么?我需要确保,如果任何模型都有新插入或更新的子记录,则缓存中的父记录是更新。当前,一旦某些内容进入缓存,它就不会更新,因此该网页显示了过时的信息。如果您可以向我展示上述代码段的实际代码更改,那将是最有帮助的。

n

一个相对简单的方法是将一个函数附加到post_save模型信号上,如果模型实例被更新,则使缓存无效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Spring Batch中使用MongoItemWriter更新和插入文档?

在Spring Data中使用继承时如何检索对象

在Django模型中使用Greatest函数时如何获取注释中的相关对象列表

如何在symfony中使用Memcache

如何在sqldeveloper中使用IF else条件检索最新实例

如何在C ++中使用枚举参数实例化对象?

如何在Django模型中使用芹菜节拍为每个对象创建单独的任务

如何使用多处理python更新和检索图像?

如何在Django中使用模型表单编辑对象?

如何在XAML中使用实例化为资源的对象

如何在Prism中使用MEF检索/导入对象

如何在Wordpress中使用更新和删除查询

呈现HTML页面时如何在Django中使用与用户关联的模型

如何在Django中使用queryset值为filter的字段过滤模型的实例?

如何在gson android中使用模型检索json?

如何在 Django 中使用 Q 对象

如何在django模型中使用外键获取对象的所有属性

如何在 Django Rest Framework 中使用序列化程序检索具有嵌套关系的模型数据?

如何在 Django 中使用字典更新模型的表

如何在子查询中使用 Eloquent 模型属性?

如何在 Django 中更新和保存模型的字段

如何在 Django 中使用一个查询在没有 FK 的情况下检索相关实例

我在 Django 中使用基于类的视图来更新和删除记录时出现 TemplateDoesNotExist 错误

如何在 Django 模型中使用查询?

如何在 JavaScript 中使用 Django 的模型

如何在 Django 中使用嵌套对象创建模型

如何在Django中使用模型FileField上传文件时获取实例

如何使用 ForeignKey 检索 Django 模型对象?

错误。如何在 laravel 中使用 ajax 进行实时表更新和删除