动态网站的问题在于它是动态的,也就是说每次用户访问呢,服务器都要执行数据库查询,启动模板,执行业务逻辑以及最终看到你想看到的一个页面,这一切都是动态python
生成的,也是比较昂贵的。数据库
缓存的目的是为了不重复计算,特别是一些比较耗时间,资源的。Django提供了不一样粒度数据的缓存,你能够缓存整个页面,也能够缓存某个部分,甚至整个网站。apache
设定缓存django
缓存系统须要一些少许的设定工做,也就是说,你必须告诉他缓存的数据应该放到哪里,在数据库中,在文件系统,后者是直接在内存中,这个是一个重要的决定,影响您的告诉缓存的性能windows
是的,有些类型的缓存比其余类型快。后端
缓存设置在settings文件的CACHE_BACKEND中,这里是一个CACHE——BACKEND全部可用值的解释。缓存
内存缓存安全
memcached是迄今为止能够用于Django中的最快,最有效的缓存类型,Memcached是彻底基于内存的缓存框架,最初开发它是用以处理高负荷的livejournal.com随后是Django Inbteractive公司开源。它被用于一些站点,例如facebook和维基百科网站,以减小数据库访问,而且大幅提升网站的性能。服务器
Memcached是免费的的,他做为一个守护进程的运行,并分配了特定数量的内存,他只是提供了添加,检索和删除缓存中的任意数据的高速接口。全部数据都是直接存储在内存中,因此没有-对使用的数据库或者文件系统的开销。框架
CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
Memcached的一个极好的特性是他在多个服务器分享缓存的能力,这意味着您能够在多台机器上运行Memcache的守护进程,该程序会把这些机器当成一个单一缓存,而无需重复在每台机器上运行缓存值,要充分利用此功能,请在CACHE_BACKEND里面引入全部服务器的地址,用分号分隔。
最后有关Memcached的一点是,基于内存的缓存有一个重大的缺点,因为缓存的数据存储在内存中,因此若是您的服务器崩溃,数据将会消失,显然,内存不是用来持久化数据的,所以不要基于内存的缓存做为您惟一的存储数据的缓存,毫无疑问,在Django的缓存后端不该该用于持久化,他们原本被设计成缓存的解决方案,可是咱们任然指出此点,这里是由于基于内存的缓存知识暂时的。
CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'
数据库缓存
为了使用数据库缓存后端,首先在数据库中运行这个命令以建立缓存表:
python manage.py createcachetable [cache_table_name]
这里的[cache_table_name]是要建立的数据库表名(这个名字本身取)
,这个命令以Djangio的数据库缓存系统所指望的格式建立一个表。
CACHE_BACKEND=‘db://my_cache_table’
数据库缓存后端使用settings文件指定的同一个数据库,那么数据库缓存的效果最明显。
文件系统缓存
要把缓存项目放在文件系统中,请为CACHE_BACKEND使用/'fileL//'的缓存类型,例如,要把缓存数据能够缓存在/var/tmp/django_cache,若是使用的是windows,在file://以后加上文件的驱动器号。
file://c:/foo/bar
目录路径应该是绝对路劲,要改是以你的文件系统的根开始,在设置的结尾放置斜线与否可有可无。
确认该设置指向的目录存在而且你的Web服务器运行的系统的用户能够读写该目录。 继续上面的例子,若是你的服务器以用户apache运行,确认/var/tmp/django_cache存在而且用户apache能够读写/var/tmp/django_cache目录。
每一个缓存值将被存储为单独的文件,其内容是Python的pickle模块以序列化(“pickled”)形式保存的缓存数据。 每一个文件的名称是缓存键,以规避开安全文件系统的使用。
若是你想利用内存缓存的速度优点,但又不能使用Memcached,能够考虑使用本地存储器缓存后端。 此缓存的多进程和线程安全。 设置 CACHE_BACKEND 为 locmem:/// 来使用它,例如:
CACHE_BACKEND = 'locmem:///'