Django的缓存机制
讲缓存之前先了解两个知识点:QPS和TPS
QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。网站能抗住的并发量。
TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。
客户机在发送请时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数
并发量的优化:
使用cdn、精灵图、页面本地缓存、nginx做负载均衡,后台服务做集群化的部署 后台缓存(django中的缓存)、数据库的主从同步、读写分离、异步处理(celery:分布式的异步任务框架) --------------------------------------------------------------- 集群和分布式、负载均衡、同步和异步、轮循
django的六种缓存方式
开发调试缓存、内存缓存、文件缓存、数据库缓存 Memcache缓存(使用python-memcached模块) Memcache缓存(使用pylibmc模块) # 经常使用的有文件缓存和Mencache缓存
Django6种缓存的配置
开发调试(此模式为开发调试使用,实际上不执行任何操作)
settings.py文件配置
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 缓存后台使用的引擎 'TIMEOUT': 300, # 缓存超时时间(默认300秒,None表示永不过期,0表示立即过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) }, } }
内存缓存(将缓存内容保存至内存区域中)
settings.py文件配置
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', # 指定缓存使用的引擎 'LOCATION': 'unique-snowflake', # 写在内存中的变量的唯一值 'TIMEOUT':300, # 缓存超时时间(默认为300秒,None表示永不过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } }
文件缓存(把缓存数据存储在文件中)
settings.py文件配置
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定缓存使用的引擎 'LOCATION': '/var/tmp/django_cache', #指定缓存的路径 'TIMEOUT':300, #缓存超时时间(默认为300秒,None表示永不过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } }
数据库缓存(把缓存数据存储在数据库中)
settings.py文件配置
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', # 指定缓存使用的引擎 'LOCATION': 'cache_table', # 数据库表 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } }
注意,创建缓存的数据库表使用的语句:
python manage.py createcachetable
缓存粒度
全站、单页面、局部缓存
配置setting文件,把cache配置进去
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定缓存使用的引擎 'LOCATION': '...path', #指定缓存的路径 'TIMEOUT':300, #缓存超时时间(默认为300秒,None表示永不过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } }
全站缓存
在setting中配置两个中间件,注意顺序
‘django.middleware.cache.UpdateCacheMiddleware’, #第一 ......... ‘django.middleware.cache.FetchFromCacheMiddleware’, #最后
“update” 必须配置在第一个 “fetch” 必须配置在最后一个
CACHE_MIDDLEWARE_SECONDS=10 # 设置缓存时间
单页面缓存
from django.views.decorators.cache import cache_page @cache_page(3) #代表缓存时间 def index(request): timer = time.time() return render(request,'catch_time.html',{'time':timer}) # 对应的视图
局部缓存(前端处理)
views:
def index(request): timer = time.time() return render(request,'catch_time.html',{'time':timer})
前端:
{% load cache %}
{% cache 3 'test' %}
当前时间:{{ time }}
{% endcache %}
高级用法:
前后端分离项目:
# 设置值和取值
cache.set('test_data',{'name':'XXX','age':18},5) cache.get('test_data')