标签:默认 cloud 内容 避免 第一个 timeout 模块 from mem
必要性:
通用设置:
# settings.py
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware', # 必须设置在第一个位置
'django.middleware.cache.FetchFromCacheMiddleware', # 必须设置在最后一个位置
]
CACHE_MIDDLEWARE_ALIAS = 'default' # 用来存储的缓存别名
CACHE_MIDDLEWARE_SECONDS = 0 # 所有页面默认缓存时间,默认600
# 关键的前缀,当多个站点使用同一个配置的时候,这个可以设置可以避免发生冲突,一般设置为网站域名
CACHE_MIDDLEWARE_KEY_PREFIX ='www.demo.com'
# 那么只有匿名的请求会被缓存,这是一个禁用缓存非匿名用户页面的最简单的做法,注意确保已经启用了Django用户认证中间件
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = False
按照存储位置的六种缓存方式:
1、内存中缓存,内容以字符串形式存储在内存中, 但是位置无法确定,这个缓存是多进程和线程安全的:
# setting.py
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
'OPTIONS': {
'MAX_ENTRIES': 300, # 最大缓存个数(默认300)
'CULL_FREQUENCY': 3,
# 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
},
}
}
2、文件中缓存,保存至指定的文件,注意是绝对位置(从根目录开始),必须保证服务器对你列出的路径具有读写权限:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache', # 需要指定文件夹路径
}
}
3、数据库中缓存:
# 先执行创建表命令 python manage.py createcachetable
# 默认会创建my_cache_table,当然也可以指定缓存表
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table', # 数据库表
}
}
4、Memcache缓存(python-memcached模块)
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211', # 类似于连接远程缓存服务器
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
# 支持简单的分布式,将数据分别存储在多个内存中, 防止其中一个缓存清空
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock',
}
}
按照缓存的使用范围分类:
FetchFromCacheMiddleware
获取内容并返回给用户UpdateCacheMiddleware
会将缓存保存至缓存,从而实现全站缓存。CACHE_MIDDLEWARE_SECONDS = 5 # 连续多次请求,每隔5s就会进行数据库操作
2、单独视图实现缓存,例如某些静态页面可以使用此方法:
# 方式一:
from django.views.decorators.cache import cache_page
# 参数为更新的时间(s)
@cache_page(60 * 15)
def my_view(request):
...
# 方式二:
from django.views.decorators.cache import cache_page
urlpatterns = [
url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),
]
<!DOCTYPE html>
# 在模板中导入内置的中间件
{% load cache %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页面</title>
</head>
<body>
<h1>主界面</h1>
{% cache 3 '局部刷新' %}
{% for user in user_list %}
{{ user.name }}
{% endfor %}
{% endcache %}
</body>
</html>
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
标签:默认 cloud 内容 避免 第一个 timeout 模块 from mem
原文地址:https://www.cnblogs.com/fqh202/p/9448053.html