Django 中使用 memcache 的最佳实践

Django官方提供了cache系统, 支持memcache, db cache, file cache等等. 总的来说, Django的cache系统使用还是挺方便的. 但是存在一个缺点, 当你有多个memcache, 并且希望将不同的内容放到不同的memcache里的时候, Django的cache系统无法做到.

当然, 你可以抛开Django的cache系统, 在代码中使用最基本的python-memcached. 可是, 这样到处创建memcache Client, 浪费资源而且不利于管理, 更重要的是无法即时关闭socket, 导致了长连接. 通过阅读Django cache系统的源代码( django/core/cache/backends/memcached.py, 我们总结出了一个最佳的实践方法.

建立一个cache.py文件, 文件中定义要使用个各种memcache Client, 通过signal在request结束的时候通过回调函数关闭memcache的socket.

例如:

from django.core.cache.backends.memcached import CacheClass

user_mc = CacheClass('%s:%s;%s:%s' % ('11.11.11.11', '11211', '22.22.22.22', '11212'), {})

if hasattr(user_mc, 'close'): signals.request_finished.connect(user_mc.close)

然后, 在任何Django的view中, 只需要from cache import user_mc, 就可以自由的使用user_mc了. 即不需要自己定义, 也不需要自己关闭. 经过实际测试, 这种实践效果不错.

作者:@henryhuang 原文

079caf97c33d439abb767dd634c6f99b

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。