缓存的作用简单来说就是节约计算资源同时提高页面的访问速度,很适合用于静态页面。
Django的缓存系统需要少量设置,去告诉它缓存数据应该放在何处,数据库或者文件系统或者内存。
Memcached
Memcached是最快的缓存类型,完全基于内存的缓存服务。
Memcached作为一个守护进程运行,并分配了一定数量的RAM。它所做的只是提供了一个快速接口,用于在缓存中添加、检索和删除数据。所有数据都直接存储在内存中,因此没有数据库或文件系统使用的开销。
基于内存的缓存有一个缺点,因为数据存储在内存中,一旦服务器崩溃,数据将会丢失,不利于持久存储。个人觉得最好的方法应该是根据各个缓存类型的特点,结合使用于一个网站中。
下面是设置Memcached作为默认缓存的设置:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
Database caching
将数据存储到你的数据库中,快速且索引良好的数据库最有效。
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
}
Filesystem caching
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
}
}
Local-memory caching
如果没有指定缓存类型,Local-memory caching就是默认的缓存。
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
# 这里LOCATION的值是一个像name的标识,如果你只有一个本地内存缓存,这个选项可以省略
'LOCATION': 'unique-snowflake',
}
}
The per-view cache
缓存单个视图输出,通过cache_page装饰器。
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
...
如果有多个url指向同一视图,每个url都会单独缓存。
cache_page的第一个参数是缓存时间,按秒计算,另外还有一个可选参数cache,如果你设置了多个缓存类型,这个参数可以指定数据存放到那个缓存当中,用法:
@cache_page(60 * 15, cache="special_cache")
def my_view(request):
...
多缓存的设置方法,例如:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
'file_cache': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
}
}
Django内建的cache backend(缓存后端):
- 'django.core.cache.backends.db.DatabaseCache'
- 'django.core.cache.backends.dummy.DummyCache'
- 'django.core.cache.backends.filebased.FileBasedCache'
- 'django.core.cache.backends.locmem.LocMemCache'
- 'django.core.cache.backends.memcached.MemcachedCache'
- 'django.core.cache.backends.memcached.PyLibMCCache'
如果使用默认的cache backend,也就是'django.core.cache.backends.locmem.LocMemCache',可以直接写空字符串''。