这篇文章将为大家详细讲解有关使用Django怎么实现一个缓存系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
缓存的逻辑:
given a URL, try finding that page 拷贝,缓存 if 从而page is 拷贝,缓存: return 从而cached 页面 其他: generate 从而页面 ,,节省,generated page 拷贝,cache (for next 时间) ,return 从而,generated 页面
Django提供了不同粒度的缓存:你可以缓存某个页面,也可以只缓存很难计算,很消耗资源的某个部分,或者直接缓存整个网站。
Django也可以和一些“下游“缓存一起协作,例如鱿鱼和基于浏览器的缓存,这些类型的缓存你不直接控制,但是你可以提供给他们站点哪部分应该被缓存和怎样被缓存(通过HTTP header)。
<强>设置缓存强>
中在设置的缓存中设置缓存、下面是几个可用的缓存选项:
<强> Memcached 强>
Django目前原生支持的最快最有效的缓存系统。要使用Memcached,需要下载Memcached支持库,一般是python-memcached或者pylibmc。
然后设置后端为django.core.cache.backends.memcached.MemcachedCache(使用python-memcached时)或者django.core.cache.backends.memcached.PyLibMCCache(使用pylibmc时)。
设置位置为ip:港口或者unix:路径。例如:
CACHES =, { ,& # 39;默认# 39;:,{ & # 39;才能端# 39;:,& # 39;django.core.cache.backends.memcached.MemcachedCache& # 39; & # 39;才能位置# 39;:,& # 39;127.0.0.1:11211& # 39; ,} }
或者
CACHES =, { ,& # 39;默认# 39;:,{ & # 39;才能端# 39;:,& # 39;django.core.cache.backends.memcached.MemcachedCache& # 39; & # 39;才能位置# 39;:,& # 39;unix:/tmp/memcached.sock& # 39; ,} }
当使用pylibmc时,去掉unix:/前缀:
CACHES =, { ,& # 39;默认# 39;:,{ & # 39;才能端# 39;:,& # 39;django.core.cache.backends.memcached.PyLibMCCache& # 39; & # 39;才能位置# 39;:,& # 39;/tmp/memcached.sock& # 39; ,} }
还可以在多台机器上运行Memcached进程,程序将会把这组机器当作一个单独的缓存,而不需要在每台机器上复制缓存值:
CACHES =, { ,& # 39;默认# 39;:,{ & # 39;才能端# 39;:,& # 39;django.core.cache.backends.memcached.MemcachedCache& # 39; & # 39;才能位置# 39;:, ,,& # 39;172.19.26.240:11211& # 39; ,,& # 39;172.19.26.242:11212& # 39; ,,& # 39;172.19.26.244:11213& # 39; ,,) ,} }
由于Memcached是基于内存的缓存,数据只存储在内存中,如果服务器死机的话数据会丢失,所以不要把内存缓存作为唯一的数据存储方法。
<强>数据库缓存强>
Django也可以把缓存数据存储在数据库中。
CACHES =, { ,& # 39;默认# 39;:,{ & # 39;才能端# 39;:,& # 39;django.core.cache.backends.db.DatabaseCache& # 39; & # 39;才能位置# 39;:,& # 39;my_cache_table& # 39; ,} }
位置为数据库中表的名字,任意起,在数据库中未被使用过即可以。
创建缓存表:
python manage.py createcachetable
使用多数据库时,也需要为缓存表写路由器:
class CacheRouter(对象): ,“““A  router 用control all database cache operations"““ , ,def db_for_read(自我,,模型,,* *提示): “才能All cache  read operations go 用,replica" if 才能;model._meta.app_label ==, & # 39; django_cache& # 39;: ,,return & # 39; cache_replica& # 39; return 才能;没有 , ,def db_for_write(自我,,模型,,* *提示): “才能All cache  write operations go 用primary" if 才能;model._meta.app_label ==, & # 39; django_cache& # 39;: ,,return & # 39; cache_primary& # 39; return 才能;没有 , ,def allow_migrate (db,自我,还以为,app_label, model_name=没有,,* *提示): “才能Only install 从而cache model 提醒primary" if 才能;app_label ==, & # 39; django_cache& # 39;: ,,return db ==, & # 39; cache_primary& # 39; return 才能;没有
<强>文件系统缓存
强>