动态网站的问题在于它是动态的,也就是说每次用户访问呢,服务器都要执行数据库查询,启动模板,执行业务逻辑以及最终看到你想看到的一个页面,这一切都是动态
生成的,也是比较昂贵的。
缓存的目的是为了避免重复计算,特别是一些比较耗时间,资源的。Django提供了不同粒度数据的缓存,你可以缓存整个页面,也可以缓存某个部分,甚至整个网站。
设定缓存
缓存系统需要一些少量的设定工作,也就是说,你必须告诉他缓存的数据应该放到哪里,在数据库中,在文件系统,后者是直接在内存中,这个是一个重要的决定,影响您的告诉缓存的性能
是的,有些类型的缓存比其他类型快。
缓存设置在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:///'