我正在使用Django的本机授权/身份验证模型来管理我的WebApp的登录。这将创建用户模型的实例。
我想写一个简单的基于类的APIView,它可以告诉我是否已经使用了特定的电子邮件(IE:我的数据库中是否已有用户使用给定的电子邮件?)。第一次调用此API时,它应该从DB获取匹配的User对象。但是随后它被调用,它应该从Memcache返回它(当且仅当数据库中的基础行没有改变时)。我怎么能这样做?
我应该继承generic.APIView吗?为什么或者为什么不?视图会是什么样子?特别是我想了解如何正确地进行memcaching和cache-coherency检查。此外,如果我有另一个修改User对象的API,这个memcaching方案将如何工作?
感谢。我无法找到关于在Django中正确使用memcaching的详细的防止傻瓜手册。
答案 0 :(得分:0)
缓存可能是django中最简单的部分 - 所以我将讨论留到最后。更大的问题是找出模型何时发生变化。
您可以决定更新的内容。例如,您可能会认为只有在更新特定字段时才会更新缓存。您的缓存更新过程应限于写入/更新代码或视图。如果您使用此方法,那么我建议django-model-utils
and its StatusField
- 您可以通过覆盖它来在save()
方法中添加此逻辑;或者在更新模型的代码中实现它。
您也可以采用更简单的方法,即无论更新内容如何 - 只要调用save()
,就会使缓存过期并重新填充。
其余代码非常简单。
尝试从缓存中获取项目,如果项目不存在(称为缓存未命中),则通过从数据库中提取来填充缓存。否则,您将从缓存中获取该项目,然后为自己保存数据库命中。
缓存界面非常简单,您set('somekey', 'somevalue')
可以选择告诉它何时使项目到期。然后你尝试get('somekey')
,如果这返回None
,然后它的缓存未命中(可能是项目已过期),你必须获取它并填充缓存。否则,您将获得缓存的对象。