from django.shortcuts import render
def index(request):
# 极度复杂的渲染
book_list = Info.objects.all() # 假设此处查询时间为2s,秒级返回真的很慢
request render(request,'index.html',locals())
if the page in cache:
retun cache
else:
1. # 存入数据
2. # 存入缓存
3. # 返回存入数据
将缓存存储在你的数据库中,可能是MySQL
说明: 尽管存储介质没有更换,但是当把每一次查询负责的结果存储到表里 比如多个条件的过滤查询结果,可避免重复进行查询。
# 此方式为存储到数据库中
CACHES = {
'default':{
'BACKEND':'django.core.cache.backends.db.DatabaseCache',
'LOCATION':'my_cache_table', # 存储到那张表中
'TIMEOUT':300,# 缓存保存时间单位为秒
'OPTIONS':{
'MAX_ENTRIES':300, # 缓存最大的数据条数
'CULL_FREQUENCY':2 # 缓存达到最大值,删除1/x的缓存数据1/2
}
}
}
# 此方式为存储到服务器内存中
CACHES = {
'default':{
'BACKEND':'django.core.cache.backends.locmem.LocMemCache',
'LOCATION':'unique-snowflake',
}
}
# 此方式为文件系统缓存
CACHES = {
'default':{
'BACKEND':'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION':'/var/tmp/django_cache', # Cache文件的存储路径
}
}
执行createcachetable
python manage.py createcachetable
# 在视图中写
from django.views.decorators.cache import cache_page
@cache_page(15)
def test_cache(request):
t = time.time()
return HttpResponse("Time is %s"%(t)) # 可以使用时间戳进行测试
# 在路由中写
from django.urls import path
from . import views
from django.urls import re_path
urlpatterns = [
path('registory/',views.registry_view),
path('login/',cache_page(60)(login_view)),
]
# 方式1:引入cache[Key]
from django.core.cache import cache
def test_cache(request):
cache1 = cache['default'] # 把CACHE的KEY写到这里就行
cache2 = cache['myrails2']
# 方式2:from django.core.cache import cache
相当于直接引入了CACHES配置中的'default'
cache.set(key,value,timeout)
-存储缓存CACHES
的TIME OUT
值cache.set('username','123')
cache.get(key)
-获取缓存cache.get('username')
cache.add(key,value)
-存储缓存,只在Key不存在的时候生效cache.add('user','name')
cache.get_many(key_list)
-批量获取缓存cache.delete(key)
-删除Keycache.delete_many(key_list)
-批量删除