使用Django怎么实现一个缓存系统

  介绍

这篇文章将为大家详细讲解有关使用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 才能;没有

<强>文件系统缓存

使用Django怎么实现一个缓存系统