一,Django设置缓存的三种类型:

#将数据缓存到表里
CACHE={
'default':{
'BACKEND':'django.core.cache.backends.db.DatabaseCache',#数据库缓存引擎
'LOCATION':'my_cache_table', #声明缓存存到哪张表!
'TIMEOUT':300,#缓存保存时间单位秒,默认是300秒
'OPTIONS':{
'MAX_ENTRIES':300,#缓存最大数据条数
'CULL_FREQUENCY':2,#缓存条数达到最大值时,删除1/2的缓存数据
}
}
}
#数据缓存到内存中
CACHES = {
'default':{
'BACKEND':'django.core.cache.backends.locmem.LocMemCache',
'LOCATION':'/var/tmp/django_cache',#这个时文件夹的路径
'LOCATION':'unique-snowflake'
}
}
#将缓存数据存储到本地文件中
CACHE = {
'default':{
'BACKEND':'django.core.cache.backends.filebased.FileBasedCache'
}
}

 

二,整体缓存的两种方法:

方式1:

直接配置一个路由,然后把需要缓存的视图函数丢进去,场景举例:突然有人和你说xxx视图变慢了啊,你就可以直接配个路由,然后把视图往里一丢,就完成任务了,比较省心

#整体缓存写法1:
from django.views.decorators.cache import cache_page
urlpatterns = [
path('foo/', cache_page(30)(my_view))
]

方式2:

在需要缓存的视图中使用装饰器,例如:

#整体缓存写法2:
from django.views.decorators.cache import cache_page
@cache_page(30) #单位秒
def my_view(request):
...

 

三,如何避免程序查询数据缓慢的问题?

答:在内存里放一份临时的数据样本,避免使用复杂的sql语句去查询,如果你能大量的在你的视图中运用缓存,那么一定会大大降低数据处理成本

四,缓存应用场景:

数据变动频率较小的数据,例如博客列表页,电商商品页等,

五示例:

1创建一个项目并用pycharm打开

#找到dajngo-admin的位置:
C:\Users\66907\AppData\Roaming\Python\Python310\site-packages\django\bin
#添加环境变量
电脑-属性-高级系统设置-环境变量-Path-编辑-新建-粘贴上面的网址
#创建一个项目
C:\Users\66907>d:
D:\>cd PycharmProjects
D:\PycharmProjects>django-admin.py startproject mysite7

2创建一个数据库:

D:\PycharmProjects>mysql -uroot -p123456
mysql> create database mysite7 default charset utf8;

3在setting.py配置数据库:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite7',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306'
}
}

4在setting中空白位置配置数据库缓存:

#将数据缓存到表里
CACHES = {
'default':{
'BACKEND':'django.core.cache.backends.db.DatabaseCache',#数据库缓存引擎
'LOCATION':'my_cache_table', #声明缓存存到哪张表!
'TIMEOUT':300,#缓存保存时间单位秒,默认是300秒
'OPTIONS':{
'MAX_ENTRIES':300,#缓存最大数据条数
'CULL_FREQUENCY':2,#缓存条数达到最大值时,删除1/2的缓存数据
}
}
}

5手动创建缓存配置里面定义的表my_cache_table:

D:\PycharmProjects\mysite7>python manage.py createcachetable

6把django自带的表初始化到数据库

D:\PycharmProjects\mysite7>python manage.py migrate

 7在同名mysite7目录下创建一个views.py

mysite7 D:\PycharmProjects\mysite7
mysite7
__init__.py
asgi.py
settings.py
urls.py
views.py
wsgi.py
manage.py

8编写一个视图函数,把时间戳输出到浏览器,如果用户过来走的是缓存,那时间戳应该是一个旧的值,如果不走缓存,那么用户拿到的应该是一个新的值,我们通过观察这个变化即可判断缓存是不是生效了!

from django.http import HttpResponse
from django.views.decorators.cache import cache_page
import time
@cache_page(15)
def test_cache(request):
t = time.time()
return HttpResponse('t is %s'%(t))

9配置路由:

from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('test_cache',views.test_cache),
]

10浏览器访问测试:​​http://127.0.0.1:8000/test_cache​

你可以不停的刷新浏览器,但是浏览器里的时间没有任何变化,直到15秒后才会变化,此时说明缓存生效了