Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-用于多进程的Johnny缓存_Django_Django Cache - Fatal编程技术网

Django-用于多进程的Johnny缓存

Django-用于多进程的Johnny缓存,django,django-cache,Django,Django Cache,我已经用一个托管在apache上的应用程序配置了johnny cache。它将memcached配置为在同一台机器上的默认端口上运行的后端 当多个web客户端通过apache时,缓存工作正常。它们都从缓存中读取,任何更新都会使缓存无效。但是,当python程序/脚本使用django(与johnny配置相同的settings.py)从DB中读取时,它不会从缓存中读取,因此该程序所做的任何更新都不会影响缓存。这让我不得不面对web客户端从缓存中读取过时数据的问题 我在johnny cache的文档中

我已经用一个托管在apache上的应用程序配置了johnny cache。它将memcached配置为在同一台机器上的默认端口上运行的后端

当多个web客户端通过apache时,缓存工作正常。它们都从缓存中读取,任何更新都会使缓存无效。但是,当python程序/脚本使用django(与johnny配置相同的settings.py)从DB中读取时,它不会从缓存中读取,因此该程序所做的任何更新都不会影响缓存。这让我不得不面对web客户端从缓存中读取过时数据的问题

我在johnny cache的文档中没有找到任何与此相关的内容。对这种情况有什么想法吗

我正在使用johnny cache 0.3.3、django 1.2.5和python 2.7

编辑: 为了回答评论中的一个问题,我以这种方式阅读了脚本中的DB-

>>> cmp = MyModelClass.objects.get(id=1)
>>> cmp.cust_field_2
u'aaaa'
我知道它不会从缓存中读取,因为我通过触发update sql语句直接更新表,更新后的值不会反映在我的web客户端中,因为它仍然从缓存中读取。而我的脚本在使用MyModelClass.objects.get(id=1)重新获取对象时显示更新的值


谢谢,

当您运行脚本/管理命令时,似乎没有调用中间件,这就是您看到差异的原因。这在阅读中间件上的文档时是有意义的,因为它处理诸如请求和视图之类的事情,而这些在自定义脚本中是不存在的

我找到了解决这个问题的方法,在Johnny Cache bitbucket repo中有一个问题。在对数据库执行任何操作之前,请在脚本中输入以下内容:

from johnny.middleware import QueryCacheMiddleware
qcm = QueryCacheMiddleware()

# put the code for you script here

qcm.unpatch()
你可以在这里看到更多关于这方面的信息:

在这里:


这是从以下位置推荐的方法:

更新:

我观察到,如果您的tasks.py文件在一开始就有这个功能,那么您就不能再使用settings.py禁用johnny cache了


我已经报告了这个问题:

您可以发布一些python脚本如何从数据库读取的示例代码吗?如何调用此脚本?Johnny cache依赖于中间件,因此,如果以某种方式避免使用该中间件,您将看不到缓存中的值。我只需使用-mc=MyModel.objects.get(id=1)加载一个对象,并在其中一个字段上打印/查看该值。如果重新启动Web服务器,它是否获得与脚本相同的值?这可能是其他的东西在“缓存”与约翰尼无关的东西。该示例代码也是通过管理命令或其他方式调用的吗?脚本是如何设置的?不,重新启动Web服务器仍然会给我缓存的结果。这正是我所期望的。我的示例脚本代码只是通过python交互式shell从终端运行。我有另一个合适的应用程序,它也通过一个shell脚本在终端上运行,在启动之前,它设置了django所需的所有环境变量,比如设置模块之类的东西。我确实读过关于取消补丁的内容,也读过代码。我将其解释为-“如果不需要缓存,请取消补丁”。无论如何,我查看了您提到的问题,并尝试了建议的代码。这似乎没用(joshcartme,对不起,它确实有效!我只是做得不对。我再试了一次,效果很好。文档和Jason Moiron在本期中所说的现在对我来说是有意义的。谢谢你的帮助!你能引用文档中的链接吗?我不记得在做这件事的时候遇到过。当然,看起来对我来说有点深刻注意。谢谢!约翰尼没有太多的文档,我不知道我怎么会错过。
from johnny.cache import enable
enable()