前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django-缓存内容

Django-缓存内容

作者头像
Yuou
发布2022-09-26 15:31:06
3410
发布2022-09-26 15:31:06
举报
文章被收录于专栏:乱七八糟技术日常

缓存的定义

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

缓存案例

  • 案例分析
代码语言:javascript
复制
from django.shortcuts import render
def index(request):
	# 极度复杂的渲染
	book_list = Info.objects.all() # 假设此处查询时间为2s,秒级返回真的很慢
	request render(request,'index.html',locals())
  • 优化思想-(尝试从缓存中查询)
代码语言:javascript
复制
if the page in cache:
	retun cache

else:
	1. # 存入数据
	2. #  存入缓存
	3. # 返回存入数据

设置缓存

将缓存存储在你的数据库中,可能是MySQL 说明: 尽管存储介质没有更换,但是当把每一次查询负责的结果存储到表里 比如多个条件的过滤查询结果,可避免重复进行查询。

代码语言:javascript
复制
# 此方式为存储到数据库中
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

代码语言:javascript
复制
python manage.py createcachetable

整体缓存策略

代码语言:javascript
复制
# 在视图中写
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的使用

代码语言:javascript
复制
# 方式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
代码语言:javascript
复制
cache.set('username','123')

cache.get

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

cache.add

  1. cache.add(key,value)-存储缓存,只在Key不存在的时候生效
  • 返回值:True=成功/False=失败
代码语言:javascript
复制
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)-批量删除
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 缓存的定义
  • 缓存案例
  • 设置缓存
  • 整体缓存策略
  • 缓存API的使用
    • cache.set
      • cache.get
        • cache.add
          • cache.get_many
            • cache.delete
              • cache.delete_many
              相关产品与服务
              对象存储
              对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档