Python论坛  - 讨论区

标题:[python-chinese] django缓存机制?

2007年03月28日 星期三 17:24

老生 liangzhengzhang在gmail.com
星期三 三月 28 17:24:49 HKT 2007

ÕâÁ½ÌìÑо¿django»º´æ£¬ÊµÔÚÄÕ»ð£¬

Êý¾ÝµÄ»º´æÊÇûʲôÎÊÌ⣬¼´£ºÉèÖà cache.set("test",data, 60*60*24)£¬¶ÁÈ¡ cache.get("test"),

ÔÚviews.pyµÄ·½·¨Ç°ÉèÖûº´æÈ磺 @cache_page(10*60)£¬Ö´ÐÐÌáʾ 'function' object has no
attribute 'method'£¬

ÒÔÉÏÊÇÔÚWINÉϽøÐвâÊԵģ¬Ô­±¾ÒÔΪÊÇsetting.pyÎļþÖÐÉèÖõĻº´æÀàÐͲ»Ö§³Ö£¬È磺CACHE_BACKEND =
'locmem:///c:/tem/£¬¶ø¹«Ë¾·þÎñÆ÷ÉÏʹÓõÄlinuxϵͳ£¬ËùÒÔ½ñÌìÒ»ÕûÌì¾ÍÔÚlinux»·¾³À´½øÐе÷ÊÔ¡£¡£¡£¡£

°²×°memcached£¬Æô¶¯£¬ÔÙ½øÐвâÊÔ£¬°´ÕÕÔÚwinÉÏÉèÖÃ@cache_page(10*60)ÒÀÈ»³öÏÖͬÑù´íÎóÌáʾ£¬È磺'function'
object has no attribute 'method'

»»ÖÖ·½Ê½£¬ÔÚurls.pyÖÐÉèÖã¬
Èç(r'^c(?P\w+)-b1/$',cache_page(VerifyPostList,10*60)),²»»á³öÈκδíÎóÌáʾ£¬ÕâÀï²»ÖªµÀÔõôÀ´²âÊÔÊÇ·ñÊÇÔÚÈ¡»º´æÀïµÄ¶«Î÷£¬ËùÒÔÓÃÖÖºÜÀÏÍÁµÄ·½Ê½²âÊÔ£¬£¬

1¡¢¹Ø±Õmemcached£¬ÖØÆô»úÆ÷£¬ÔÚurls.pyÖв»ÉèÖûº´æ£¬´òÓ¡³ÌÐòÖ´ÐÐʱ¼ä£¬

2¡¢¿ªÆômemcached£¬ÖØÆô»úÆ÷£¬ÔÚurls.pyÖÐÉèÖûº´æ£¬´òÓ¡³ÌÐòÖ´ÐÐʱ¼ä£¬

Èç´ËÖØ¸´ÒÔÉϼ¸¸ö²¼Öã¬NND£¬·¢ÏÖÁ½ÖÖ²¼ÖóÌÐòÖ´ÐеÄʱ¼ä¶¼²î²»¶à£¬£¬£¬

ÍøÉϲéÕÒÁ˺öà×ÊÁÏ£¬°üÀ¨Ó¢ÎÄ ¶¼Ã»·¢ÏÖÓÐdjangoÖÐcacheʵÏÖÔ­ÀíµÄ×ÊÁÏ£¬¿´Ô´ÂëµÄ»°£¬Ïë±Ø´ó¼Ò¶¼ÖªµÀpythonÖеÄÔ´ÂëʵÔÚÊÇÄÑ¿´¶®¡£¡£¡£



˵ÁËÕâô¶à£¬»¹ÊÇ×ܽáÒÔÏÂÎÒµÄÎÊÌâ¼°ÏëÒªÁ˽âµÄ¶«Î÷°É£¬


ÎÊÌâÒ»£ºÓÐÐÖµÜÓùý@cache_page²¢³É¹¦¹ýµÄÂð£¿

ÎÊÌâ¶þ£ºÔÚviews.pyÖж¨ÒåµÄ@cache_pageÓëÔÚurls.pyÖж¨ÒåµÄcache_page
ÓÐʲô²»Í¬£¿ÎªºÎÎÒÒÔÉϵ÷ÊÔ²âÊÔ³ÌÐòµÄÖ´ÐÐʱ¼ä¶¼Ò»Ñù£¿

ÎÊÌâÈý£ºÏëʵÏÖÄÜÕÒµ½cache_pageÖлº´æÒ³ÃæµÄ»úÖÆ£¬¼´ÏëÔÚcacheÖÐÕÒµ½»º´æÒ³ÃæµÄkey£¬ÕâÑù»òÐíÓпÉÄÜÎÒÃÇÔÚºǫ́³ÌÐòÀï¿ÉÒÔÖ±½Ó»ñµÃÓëÐÞ¸ÄÕâ¸ökeyÖеÄÖµ¡£¡£
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070328/7510acfb/attachment.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年03月28日 星期三 19:31

yi huang yi.codeplayer在gmail.com
星期三 三月 28 19:31:15 HKT 2007

我看了下代码,cache_page 不是标准的 decorator ,不能 @cache_page 这么用。
另外,python 代码很好看啊,怎么会难看懂呢。大部分代码都是平坦的一层,极少看到深层的抽象。

cache_page 在 views/decorators.py line 18 定义。
decorator_from_middleware 函数在 utils/decorators.py ,它返回一个 decorator ,作用是在调用
views 的前后调用相应的 middleware 代码(process_request, process_view,
process_response)。middleware 放在 settings 里面是对整个站点起作用,而这个函数实际是让 middleware
只对单个views 起作用。
这里 middleware 就是 middleware/cache.py 的 CacheMiddleware 了,他去使用
django.core.cache 包,这里是真正实现 cache 的地方。
core/cache/__init__.py 根据配置创建 cache 对象。cache 对象的实现就在 backends
包中不同的后端中,这些后端中的 CacheClass 类都实现了同一个协议 (get, set ,delete, get_many, has_key)。
memcached.py 的代码也很少,就是调用 memcache 模块的 api 而已。

On 3/28/07, 老生 <liangzhengzhang at gmail.com> wrote:
>
> 这两天研究django缓存,实在恼火,
>
> 数据的缓存是没什么问题,即:设置 cache.set("test",data, 60*60*24),读取 cache.get("test"),
>
> 在views.py的方法前设置缓存如: @cache_page(10*60),执行提示 'function' object has no
> attribute 'method',
>
> 以上是在WIN上进行测试的,原本以为是setting.py文件中设置的缓存类型不支持,如:CACHE_BACKEND =
> 'locmem:///c:/tem/,而公司服务器上使用的linux系统,所以今天一整天就在linux环境来进行调试。。。。
>
> 安装memcached,启动,再进行测试,按照在win上设置@cache_page(10*60)依然出现同样错误提示,如:'function'
> object has no attribute 'method'
>
> 换种方式,在urls.py中设置,
> 如(r'^c(?P\w+)-b1/$',cache_page(VerifyPostList,10*60)),不会出任何错误提示,这里不知道怎么来测试是否是在取缓存里的东西,所以用种很老土的方式测试,,
>
> 1、关闭memcached,重启机器,在urls.py中不设置缓存,打印程序执行时间,
>
> 2、开启memcached,重启机器,在urls.py中设置缓存,打印程序执行时间,
>
> 如此重复以上几个布置,NND,发现两种布置程序执行的时间都差不多,,,
>
> 网上查找了好多资料,包括英文 都没发现有django中cache实现原理的资料,看源码的话,想必大家都知道python中的源码实在是难看懂。。。
>
>
>
> 说了这么多,还是总结以下我的问题及想要了解的东西吧,
>
>
> 问题一:有兄弟用过@cache_page并成功过的吗?
>
> 问题二:在views.py中定义的@cache_page与在urls.py中定义的cache_page
> 有什么不同?为何我以上调试测试程序的执行时间都一样?
>
>
> 问题三:想实现能找到cache_page中缓存页面的机制,即想在cache中找到缓存页面的key,这样或许有可能我们在后台程序里可以直接获得与修改这个key中的值。。
>
>
>
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>



-- 
http://codeplayer.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20070328/8ca680d9/attachment-0001.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年03月28日 星期三 19:36

yi huang yi.codeplayer在gmail.com
星期三 三月 28 19:36:21 HKT 2007

事实上,如果可以从缓存中取到数据的话,是根本不会调用你的 view 代码的,你想测试缓存是否真的起了作用的话,在 view 里面做手脚就可以,比如
log 个 helloworld,然后多次请求发现确实只有一个 helloworld 。

On 3/28/07, 老生 <liangzhengzhang at gmail.com> wrote:
>
> 这两天研究django缓存,实在恼火,
>
> 数据的缓存是没什么问题,即:设置 cache.set("test",data, 60*60*24),读取 cache.get("test"),
>
> 在views.py的方法前设置缓存如: @cache_page(10*60),执行提示 'function' object has no
> attribute 'method',
>
> 以上是在WIN上进行测试的,原本以为是setting.py文件中设置的缓存类型不支持,如:CACHE_BACKEND =
> 'locmem:///c:/tem/,而公司服务器上使用的linux系统,所以今天一整天就在linux环境来进行调试。。。。
>
> 安装memcached,启动,再进行测试,按照在win上设置@cache_page(10*60)依然出现同样错误提示,如:'function'
> object has no attribute 'method'
>
> 换种方式,在urls.py中设置,
> 如(r'^c(?P\w+)-b1/$',cache_page(VerifyPostList,10*60)),不会出任何错误提示,这里不知道怎么来测试是否是在取缓存里的东西,所以用种很老土的方式测试,,
>
> 1、关闭memcached,重启机器,在urls.py中不设置缓存,打印程序执行时间,
>
> 2、开启memcached,重启机器,在urls.py中设置缓存,打印程序执行时间,
>
> 如此重复以上几个布置,NND,发现两种布置程序执行的时间都差不多,,,
>
> 网上查找了好多资料,包括英文 都没发现有django中cache实现原理的资料,看源码的话,想必大家都知道python中的源码实在是难看懂。。。
>
>
>
> 说了这么多,还是总结以下我的问题及想要了解的东西吧,
>
>
> 问题一:有兄弟用过@cache_page并成功过的吗?
>
> 问题二:在views.py中定义的@cache_page与在urls.py中定义的cache_page
> 有什么不同?为何我以上调试测试程序的执行时间都一样?
>
>
> 问题三:想实现能找到cache_page中缓存页面的机制,即想在cache中找到缓存页面的key,这样或许有可能我们在后台程序里可以直接获得与修改这个key中的值。。
>
>
>
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>



-- 
http://codeplayer.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20070328/4ea95167/attachment.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年03月29日 星期四 10:03

老生 liangzhengzhang在gmail.com
星期四 三月 29 10:03:56 HKT 2007

лл*yi huang* £¬ÔÚ¹Ù·½µÄÎĵµÉϾÍÕâôдµÄpython2.4»òÕßÒÔÉϵİ汾¿ÉÒÔʹÓà @cache_page£¬Õ溹ѽ¡£¡£¡£

×òÌìÍíÉϻؼÒÒ²ÏëÁ˺ܾ㬴òËã½ñÌì´ÓÍ·½øÐпªÊ¼µ÷ÊÔ£¬¿´ÁËÄãµÄ·ÖÎö£¬×Åʵѧϰµ½²»ÉÙ¡£¡£

ÏÈлÁË£¬ÓÐÎÊÌâÔÙÏò´ó¼ÒÌֽ̡£¡£¡£


ÔÚ07-3-28£¬yi huang <yi.codeplayer在gmail.com> дµÀ£º
>
> ÎÒ¿´ÁËÏ´úÂ룬cache_page ²»ÊDZê×¼µÄ decorator £¬²»ÄÜ @cache_page ÕâôÓá£
> ÁíÍ⣬python ´úÂëºÜºÃ¿´°¡£¬Ôõô»áÄÑ¿´¶®ÄØ¡£´ó²¿·Ö´úÂë¶¼ÊÇÆ½Ì¹µÄÒ»²ã£¬¼«ÉÙ¿´µ½Éî²ãµÄ³éÏó¡£
>
> cache_page ÔÚ views/decorators.py line 18 ¶¨Òå¡£
> decorator_from_middleware º¯ÊýÔÚ utils/decorators.py £¬Ëü·µ»ØÒ»¸ö decorator £¬×÷ÓÃÊÇÔÚµ÷ÓÃ
> views µÄǰºóµ÷ÓÃÏàÓ¦µÄ middleware ´úÂ루process_request, process_view,
> process_response£©¡£middleware ·ÅÔÚ settings ÀïÃæÊǶÔÕû¸öÕ¾µãÆð×÷Ó㬶øÕâ¸öº¯Êýʵ¼ÊÊÇÈà middleware
> Ö»¶Ôµ¥¸öviews Æð×÷Óá£
> ÕâÀï middleware ¾ÍÊÇ middleware/cache.py µÄ CacheMiddleware ÁË£¬ËûȥʹÓÃ
> django.core.cache °ü£¬ÕâÀïÊÇÕæÕýʵÏÖ cache µÄµØ·½¡£
> core/cache/__init__.py ¸ù¾ÝÅäÖô´½¨ cache ¶ÔÏó¡£cache ¶ÔÏóµÄʵÏÖ¾ÍÔÚ backends
> °üÖв»Í¬µÄºó¶ËÖУ¬ÕâЩºó¶ËÖÐµÄ CacheClass À඼ʵÏÖÁËͬһ¸öЭÒé (get, set ,delete, get_many, has_key)¡£
> memcached.py µÄ´úÂëÒ²ºÜÉÙ£¬¾ÍÊǵ÷Óà memcache Ä£¿éµÄ api ¶øÒÑ¡£
>
>  On 3/28/07, ÀÏÉú <liangzhengzhang在gmail.com> wrote:
>
> >  ÕâÁ½ÌìÑо¿django»º´æ£¬ÊµÔÚÄÕ»ð£¬
> >
> > Êý¾ÝµÄ»º´æÊÇûʲôÎÊÌ⣬¼´£ºÉèÖà cache.set("test",data, 60*60*24)£¬¶ÁÈ¡ cache.get("test"),
> >
> > ÔÚviews.pyµÄ·½·¨Ç°ÉèÖûº´æÈ磺 @cache_page(10*60)£¬Ö´ÐÐÌáʾ 'function' object has no
> > attribute 'method'£¬
> >
> > ÒÔÉÏÊÇÔÚWINÉϽøÐвâÊԵģ¬Ô­±¾ÒÔΪÊÇsetting.pyÎļþÖÐÉèÖõĻº´æÀàÐͲ»Ö§³Ö£¬È磺CACHE_BACKEND =
> > 'locmem:///c:/tem/£¬¶ø¹«Ë¾·þÎñÆ÷ÉÏʹÓõÄlinuxϵͳ£¬ËùÒÔ½ñÌìÒ»ÕûÌì¾ÍÔÚlinux»·¾³À´½øÐе÷ÊÔ¡£¡£¡£¡£
> >
> > °²×°memcached£¬Æô¶¯£¬ÔÙ½øÐвâÊÔ£¬°´ÕÕÔÚwinÉÏÉèÖÃ@cache_page(10*60)ÒÀÈ»³öÏÖͬÑù´íÎóÌáʾ£¬È磺'function'
> > object has no attribute 'method'
> >
> > »»ÖÖ·½Ê½£¬ÔÚurls.pyÖÐÉèÖã¬
> > Èç(r'^c(?P\w+)-b1/$',cache_page(VerifyPostList,10*60)),²»»á³öÈκδíÎóÌáʾ£¬ÕâÀï²»ÖªµÀÔõôÀ´²âÊÔÊÇ·ñÊÇÔÚÈ¡»º´æÀïµÄ¶«Î÷£¬ËùÒÔÓÃÖÖºÜÀÏÍÁµÄ·½Ê½²âÊÔ£¬£¬
> >
> > 1¡¢¹Ø±Õmemcached£¬ÖØÆô»úÆ÷£¬ÔÚurls.pyÖв»ÉèÖûº´æ£¬´òÓ¡³ÌÐòÖ´ÐÐʱ¼ä£¬
> >
> > 2¡¢¿ªÆômemcached£¬ÖØÆô»úÆ÷£¬ÔÚurls.pyÖÐÉèÖûº´æ£¬´òÓ¡³ÌÐòÖ´ÐÐʱ¼ä£¬
> >
> > Èç´ËÖØ¸´ÒÔÉϼ¸¸ö²¼Öã¬NND£¬·¢ÏÖÁ½ÖÖ²¼ÖóÌÐòÖ´ÐеÄʱ¼ä¶¼²î²»¶à£¬£¬£¬
> >
> > ÍøÉϲéÕÒÁ˺öà×ÊÁÏ£¬°üÀ¨Ó¢ÎÄ ¶¼Ã»·¢ÏÖÓÐdjangoÖÐcacheʵÏÖÔ­ÀíµÄ×ÊÁÏ£¬¿´Ô´ÂëµÄ»°£¬Ïë±Ø´ó¼Ò¶¼ÖªµÀpythonÖеÄÔ´ÂëʵÔÚÊÇÄÑ¿´¶®¡£¡£¡£
> >
> >
> >
> > ˵ÁËÕâô¶à£¬»¹ÊÇ×ܽáÒÔÏÂÎÒµÄÎÊÌâ¼°ÏëÒªÁ˽âµÄ¶«Î÷°É£¬
> >
> >
> > ÎÊÌâÒ»£ºÓÐÐÖµÜÓùý@cache_page²¢³É¹¦¹ýµÄÂð£¿
> >
> > ÎÊÌâ¶þ£ºÔÚviews.pyÖж¨ÒåµÄ@cache_pageÓëÔÚurls.pyÖж¨ÒåµÄcache_page
> > ÓÐʲô²»Í¬£¿ÎªºÎÎÒÒÔÉϵ÷ÊÔ²âÊÔ³ÌÐòµÄÖ´ÐÐʱ¼ä¶¼Ò»Ñù£¿
> >
> >
> > ÎÊÌâÈý£ºÏëʵÏÖÄÜÕÒµ½cache_pageÖлº´æÒ³ÃæµÄ»úÖÆ£¬¼´ÏëÔÚcacheÖÐÕÒµ½»º´æÒ³ÃæµÄkey£¬ÕâÑù»òÐíÓпÉÄÜÎÒÃÇÔÚºǫ́³ÌÐòÀï¿ÉÒÔÖ±½Ó»ñµÃÓëÐÞ¸ÄÕâ¸ökeyÖеÄÖµ¡£¡£
> >
> >
> >
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to
> > python-chinese-request在lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >
>
>
>
> --
> http://codeplayer.blogspot.com/
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070329/dbd4fb16/attachment-0001.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年03月30日 星期五 13:27

老生 liangzhengzhang在gmail.com
星期五 三月 30 13:27:53 HKT 2007

½ñÌì×ÜËãÊǵ÷ͨÁËdjangoÖеÄcacheµÄcache_page£¬×òÌìÔÚµ÷ÊÔÖгöÏÖÒ»¸öµÍ¼¶µÄ´íÎó£¬djangoÓëmemcache¸ù±¾Ã»½»»¥£¬ÎÊÌâÔÚÓÚÆô¶¯memcacheʱû°ó¶¨IP£¬
Ô­ÏÈÒÔΪËüĬÈϾÍ127.0.0.1£¬ÏÖÔÚÖ¸¶¨IP¾Í¿ÉÒÔÕý³£µ÷ÊÔÁË¡£¡£¡£
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070330/238c4dc5/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号