django

Django-23 缓存

2021-07-24  本文已影响0人  JuliusL
given a URL, try finding that page in the cache
if the page is in the cache:
  return the cached page
else:
  generate the page
  save the generated page in the cache (for next time)
  return the generated page

Django中设置缓存

CACHES = {
  'default':{
    'BACKEND':'django.core.cache.backends.db.DatabaseCache',
    'LOCATION':'my_cache_table',
    'TIMEOUT':300,#缓存保存时间 单位秒,默认值为300
    'OPTIONS':{
        'MAX_ENTRIES':300,#缓存最大数据条数
        'CULL_FREQUENCY':2, #缓存条数达到最大值时,删除1/x的缓存数据
    }
  }
}
数据缓存到服务器内存中
CACHES = {
  'default':{
    'BACKEND':'django.core.cache.backends.locmen.LocMemCache',
    'LOCATION':'unique-snowflake'
  }
}
数据缓存到本地文件中
CACHES = {
  'default':{
    'BACKEND':'django.core.cache.backends.filebased.FileBasedCache',
    'LOCATION':'/var/tmp/django_cache',#这个是文件夹的路径
    # 'LOCATION':'c:\test\cache',#windows下示例

  }
}
创建缓存表

python3 manage.py createcachetable

整体缓存策略

方式一:在视图函数里,用装饰器的方式写

from django.views.decorators.cache import cache_page

@cache_page(30)  -> 单位s
def my_view(request):
  ...

方式二:在路由里写

from django.views.decorators.cache import cache_page

urlpatterns = [
  path('foo/',cache_page(60)(my_view)),
]

示例:间隔10s后再请求更新缓存

from django.shortcuts import render
from django.http import HttpResponse
import time
from django.views.decorators.cache import cache_page
# Create your views here.

@cache_page(10)
def test_cache(request):
    t = time.time()
    return HttpResponse('t is %s'%(t))

局部缓存策略

缓存api的使用
先引入cache对象
方式一:使用caches[’CACHE配置key‘]导入具体对象

from django.core.cache import caches
cache1 = caches['myalias']
cache2 = caches['myalias_2']

方式二:
from django.core.cache import cache 相当于直接引入CACHE配置项中的'default'项

1. cache.set(key,value,timeout) - 存储缓存
2. cache.get(key) - 获取缓存
3. cache.add(key,value) - 存储缓存,只在key不存在时生效
4. cache.get_or_set(key,value,timeout) - 如果未获取到数据,则执行set操作
5. cache.set_many(dict,timeout) - 批量存储缓存

浏览器缓存策略

浏览器缓存策略.png
强缓存

不会向服务器发送请求,直接从缓存中读取资源

协商缓存

强缓存中的数据一旦过期,还需要跟服务器进行通信,从而获取最新数据;思考?如果强缓存的数据是一些静态文件,大图片等;
解答:考虑到大图片这类比较费宽带且不易变化的数据,强缓存时间到期后,浏览器会去跟服务器协商,当前缓存是否可用,如果可用,服务器不必返回数据,浏览器继续使用原来缓存的数据,如果文件不可用,则返回最新数据。

上一篇下一篇

猜你喜欢

热点阅读