Python程序教程

您现在的位置是:首页 >  Django

当前栏目

Django-缓存内容

Django,缓存,内容
2025-03-13 21:27:21 时间

缓存的定义

  • 缓存是一类可以更快速读取数据的统称,也指的是其他可以加快数据读取 速度的存储方式,一般用来存储临时数据.
  • 视图渲染有一定的成本,数据库查询频繁过高,所以对于低频变动的页面 可以考虑使用缓存技术,减少实际渲染次数,用户拿到的响应时间会更低.

缓存案例

  • 案例分析
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)),
]

缓存API的使用

# 方式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

  1. cache.set(key,value,timeout)-存储缓存
  • key: 缓存的key,字符串类型
  • value: Python对象
  • timeout: 缓存存储时间,默认为CACHESTIME OUT
cache.set('username','123')

cache.get

  1. cache.get(key)-获取缓存
  • 返回值:Key的具体值,如果没有则返回None
cache.get('username')

cache.add

  1. cache.add(key,value)-存储缓存,只在Key不存在的时候生效
  • 返回值:True=成功/False=失败
cache.add('user','name')

cache.get_many

  1. cache.get_many(key_list)-批量获取缓存
  • key_list: 包含Key的数组
  • 返回值: 取到的Key和Value的字典

cache.delete

  1. cache.delete(key)-删除Key

cache.delete_many

  1. cache.delete_many(key_list)-批量删除