一、Django缓存系统
动态网站的基本权衡是动态的。每次用户请求页面时,Web服务器都会进行各种计算-从数据库查询到模板渲染再到业务逻辑-创建站点访问者可以看到的页面。从处理开销的角度来看,这比标准的从文件系统中读取文件的服务器安排要昂贵得多。
1.1、配置缓存
缓存系统需要少量的设置。即,您必须告诉它缓存的数据应该存放在哪里-无论是在数据库中,在文件系统上还是直接在内存中。这是影响缓存性能的重要决定。是的,某些缓存类型比其他缓存类型更快。
1.1.1、Memcached
Memcached是Django原生支持的最快,最高效的缓存类型, 是一种完全基于内存
的缓存服务器。
要将Memcached与Django结合使用,请执行以下操作:
- 设置BACKEND为
django.core.cache.backends.memcached.MemcachedCache
- 设置LOCATION为ip:port值,其中ip是Memcached守护程序的IP地址,port是运行Memcached的端口
# pip install python-memcached
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
关于Memcached的最后一点是基于内存的缓存有一个缺点:由于缓存的数据存储在内存中,因此如果服务器崩溃,数据将丢失。显然,内存不是用于永久性数据存储的,因此不要依赖基于内存的缓存作为唯一的数据存储.。
1.1.2、数据库高速缓存
Django可以将其缓存的数据存储在您的数据库中。如果您拥有快速索引良好的数据库服务器,则此方法效果最佳。
要将数据库表用作缓存后端,请执行以下操作:
- 设定BACKEND为
django.core.cache.backends.db.DatabaseCache
- 设置LOCATION为tablename,数据库表的名称。该名称可以是您想要的任何名称,只要它是数据库中尚未使用的有效表名即可。
创建缓存表
python manage.py createcachetable
1.1.3、缓存参数
- TIMEOUT:用于缓存的默认超时(以秒为单位)。此参数默认为300秒(5分钟)。您可以设置TIMEOUT为None默认情况下,缓存键永不过期。值的值0使键立即过期(有效地“不缓存”)。
- OPTIONS:应传递到缓存后端的所有选项。有效选项的列表将随每个后端而有所不同,并且由第三方库支持的缓存后端会将其选项直接传递给基础缓存库。
- MAX_ENTRIES:删除旧值之前,缓存中允许的最大条目数。此参数默认为300
- CULL_FREQUENCY:MAX_ENTRIES到达时被剔除的条目分数。实际比例为 ,因此设置为在达到时剔除一半的条目。此参数应为整数,默认为1。 - KEY_PREFIX:一个字符串,它将自动包含(默认为前置)到Django服务器使用的所有缓存键中。
- VERSION:Django服务器生成的缓存键的默认版本号。
- KEY_FUNCTION 一个字符串,其中包含指向函数的虚线路径,该函数定义了如何将前缀,版本和键组成最终的缓存键。
示例:文件系统后端的超时时间为60秒,最大容量为1000:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
'TIMEOUT': 60,
'OPTIONS': {
'MAX_ENTRIES': 1000
}
}
}
1.1.4、每个站点的缓存
一旦设置了缓存,使用缓存的最简单方法就是缓存整个站点。您需要添加 django.middleware.cache.UpdateCacheMiddleware
和 django.middleware.cache.FetchFromCacheMiddleware
到您的 MIDDLEWARE设置。
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'''''''
]
1.1.5、视图缓存
使用缓存框架的更精细的方法是缓存单个视图的输出。django.views.decorators.cache
定义一个cache_page
装饰器,该装饰器将自动为您缓存视图的响应。易于使用:
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def cache(request):
"""
逻辑块
"""