缓存cache

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回。

Django中提供了6种缓存方式:

  • 开发调试
  • 内存
  • 文件
  • 数据库
  • Memcache缓存(python-memcached模块)
  • Memcache缓存(pylibmc模块)

配置

1.开发模式

 

 # 此为开始调试用,实际内部不做任何操作# 配置:CACHES = {'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache',     # 引擎'TIMEOUT': 300,                                               # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)'OPTIONS':{'MAX_ENTRIES': 300,                                       # 最大缓存个数(默认300)'CULL_FREQUENCY': 3,                                      # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
                },'KEY_PREFIX': '',                                             # 缓存key的前缀(默认空)'VERSION': 1,                                                 # 缓存key的版本(默认1)'KEY_FUNCTION' 函数名                                          # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
            }}# 自定义keydef default_key_func(key, key_prefix, version):"""Default function to generate keys.Constructs the key used by all other methods. By default it prependsthe `key_prefix'. KEY_FUNCTION can be used to specify an alternatefunction with custom key making behavior."""return '%s:%s:%s' % (key_prefix, version, key)def get_key_func(key_func):"""Function to decide which key function to use.Defaults to ``default_key_func``."""if key_func is not None:if callable(key_func):return key_funcelse:return import_string(key_func)return default_key_func

 2.内存

  # 此缓存将内容保存至内存的变量中# 配置:CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache','LOCATION': 'unique-snowflake',}}# 注:其他配置同开发调试版本

 

 3.文件

# 此缓存将内容保存至文件# 配置:
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache','LOCATION': '/var/tmp/django_cache',}}# 注:其他配置同开发调试版本

 

 

 

4.数据库

# 此缓存将内容保存至数据库# 配置:CACHES = {'default': {'BACKEND': 'django.core.cache.backends.db.DatabaseCache','LOCATION': 'my_cache_table', # 数据库表
            }}# 注:执行创建表命令 python manage.py createcachetable

 

 5.Memcache缓存(python-memcached模块)

# 此缓存使用python-memcached模块连接memcache
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': '127.0.0.1:11211',}}CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': 'unix:/tmp/memcached.sock',}}   CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': ['172.19.26.240:11211',  '172.19.26.242:11211',]}}
python-memcached模块

 

 6.Memcache缓存(pylibmc模块)

 # 此缓存使用pylibmc模块连接memcache
    CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache','LOCATION': '127.0.0.1:11211',}}CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache','LOCATION': '/tmp/memcached.sock',}}   CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache','LOCATION': ['172.19.26.240:11211','172.19.26.242:11211',]}}
pylibmc模块

 

7. Redis缓存(依赖:pip3 install django-redis

CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient","CONNECTION_POOL_KWARGS": {"max_connections": 100}# "PASSWORD": "密码",
        }}
}
from django_redis import get_redis_connection  视图中连接并操作
conn = get_redis_connection("default")

 

应用

1.全站使用缓存

 使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存MIDDLEWARE = ['django.middleware.cache.UpdateCacheMiddleware',# 其他中间件...'django.middleware.cache.FetchFromCacheMiddleware',]CACHE_MIDDLEWARE_ALIAS = ""CACHE_MIDDLEWARE_SECONDS = ""CACHE_MIDDLEWARE_KEY_PREFIX = ""

 2.单独视图缓存

方式一:from django.views.decorators.cache import cache_page@cache_page(60 * 15)def my_view(request):...方式二:from django.views.decorators.cache import cache_pageurlpatterns = [url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),]

 

from django.views.decorators.cache import cache_page@cache_page(10)   #缓存10秒
def cache(request):import timetime=time.time()return render(request,'cache.html',{'time':time,})配置settings
CACHES = {
#     'default': {
#         'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
#         'LOCATION': os.path.join(BASE_DIR,'cache'),
#     }
# }
示例

 

3.局部视图使用

  a. 引入TemplateTag{% load cache %}b. 使用缓存{% cache 5000 缓存key %}缓存内容{% endcache %}

 

{% load cache %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>{{ time }}</h1>
<h1>{{ time }}</h1>{% cache 10 c1 %}
<h1>{{ time }}</h1>
{% endcache %}</body>
</html>
示例

 

 

 

转载于:https://www.cnblogs.com/sunhao96/p/8965875.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序 等待几秒、_微信小程序—setTimeout定时器的坑

背景实验室需要将项目的app搬到微信的小程序上&#xff0c;终于知道为什么程序员是手艺人了&#xff0c;只要有需求&#xff0c;就要想方设法去填充这种需求&#xff0c;去年是小程序的元年了可以说&#xff0c;去年冬天一个叫跳一跳的小程序游戏出现在我的微信中&#xff0c;当…

linux中断处理模式,Linux在保护模式下的中断处理分析.pdf

Linux在保护模式下的中断处理分析.pdfLinux 在保护模式下的中断处理分析刘万里 杨 斌(西南交通大学计算机与通信工程学院&#xff0c;成都 610031)E-mail&#xff1a;awan摘 要 该文以 80x86 保护模式下的中断处理方法为基础&#xff0c;针对 Linux 在实时嵌入式系统中的具体应…

python3.7是什么_Python 3.7 有什么新变化

idlelib 与 IDLE 多个对自动补全的修正。 &#xff08;由 Louie Lu 在 bpo-15786 中贡献。&#xff09; Module Browser (在 File 菜单中&#xff0c;之前称为 Class Browser) 现在会在最高层级函数和类之外显示嵌套的函数和类。 &#xff08;由 Guilherme Polo, Cheryl Sabell…

4.JVM简述

JVM是一种规范。 就是一个虚拟的用于执行bytecodes字节码的计算机 可以用软件来实现&#xff0c;如IBM,SUN,BEA等按照这个规范实现&#xff0c;可以实现比SUN公司更好的JVM&#xff0c;我们自己也可以实现一个。 可以使用硬件来实现&#xff0c;如sun与intel公司研发java的芯…

python ssh shell交互_使用Paramiko在Python上用ssh实现交互式shell?

我想编写一个程序(在Windows 7上的Python 3.x中),它通过ssh在远程shell上执行多个命令.在查看paramikos的exec_command()函数之后,我意识到它不适合我的用例(因为在执行命令后通道被关闭),因为命令依赖于环境变量(由先前的命令设置)并且不能连接到一个exec_command()调用,因为它…

linux7如何进入紧急模式,CentOS7开机进入紧急模式EmergencyMode的解决办法

iOS Runtime学习笔记Associated Objects: interface NSObject (AssociatedObject) property (nonatomic, strong) id associat ...Vim&#xff0c;极简使用教程&#xff0c;让你瞬间脱离键鼠切换的痛苦注:看大家对Vim仇恨极大,其实它只是一种文本操作方式,可以减少键鼠的切换,从…

用pycharm写python_如何利用pyCharm编写和运行python文件

在安装python环境后&#xff0c;通常可以利用IDE pyCharm来编译我们的python文件。创建一个python文件夹&#xff0c;用pyCharm打开文件夹&#xff0c;在文件夹中新建一个python文件demo.py 也许你知道用cmd中的python指令 python demo.py去运行这个文件&#xff0c;但是如何在…

5.JDK环境配置

下载 进入Oracle官网下载&#xff0c;点击进入 安装 一路下一步。记住安装到哪里了。 配置环境变量 JAVA_HOME 刚才的java安装目录 PATH %JAVA_HOME%\bin PATH里配置多个用英文的分号; 分隔。 *classpath&#xff0c;jdk5.0以上可以不用配置了 测试 windows下&#xf…

GBK 编码

GBK编码范围&#xff1a;8140&#xff0d;FEFE&#xff0c;汉字编码范围见第二节&#xff1a;码位分配及顺序。 GBK编码&#xff0c;是对GB2312编码的扩展&#xff0c;因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案&#xff0c;其编码范围&#xff1a;8140&#x…

less webpack 热更新_webpack---less+热更新 使用

最近尝试用less写界面,webpack进行打包&#xff0c;然后发现每次修改less时都需要重新执行webpack打包一下&#xff0c;于是就想到了webpack热更新这个功能。一、使用lessless是一门css预处理语言&#xff0c;它是拓展了css&#xff0c;增加了变量&#xff0c;Mixin等等。使用l…

6.第一个程序Hello World

新建文件夹 在C盘新建个文件夹 mycode。注意不要用中文。 新建java文件 1、显示隐藏文件名。 2、右键新建文本文件 3、重命名为 Welcome.java。&#xff08;首字母必须大写。如果不显示隐藏文件名&#xff0c;会是Welcome.java.txt不是java文件&#xff09; 4、编写代码 p…

pythonstdin_python 笔试输入:sys.stdin.readline和input

①&#xff1a;输入一行数据并输 出两种方法 # 输入一行数据并输出 import sys # 方法一&#xff1a; str1 input() print(input 输入:,str1,len,len(str1)) print(循环遍历输入得到输入的每个字符的ascii码如下&#xff1a;) for i in str1: print(ord(i)) # 方法二&#xff…

c语言字符串二维数组的动态分配应,C语言中动态分配二维数组复习过程.doc

C语言中动态分配二维数组复习过程.docC语言中动态分配二维数组在C中动态分配内存的&#xff0c;对于单个变量&#xff0c;字符串&#xff0c;一维数组等&#xff0c;都是很容易的。C中动态分配二维数组的方法&#xff0c;很少有C语言书中描述&#xff0c;我查找了有的C语言书中…

7.Java常用开发工具

文本编辑器 任意选一款 UltraEdit EditPlus notepad 集成开发环境 IDE&#xff1a;Integrated Development Environment --JBulider &#xff08;基本淘汰&#xff09; --Eclipse 普遍使用。https://www.eclipse.org/downloads/ --NetBeans ------------- 更多的Java&a…

python京东商品_Python爬取京东的商品分类与链接

前言本文主要的知识点是使用Python的BeautifulSoup进行多层的遍历。如图所示。只是一个简单的哈&#xff0c;不是爬取里面的隐藏的东西。示例代码from bs4 import BeautifulSoup as bsimport requestsheaders {"host": "www.jd.com","User-Agent&quo…

python加入中小学课程_【python即将进入中学课堂,编程从小抓起,竟然在这几点上应验了】- 环球网校...

【摘要】我们都知道&#xff0c;不论是我们使用的app&#xff0c;还是各种各样的游戏&#xff0c;小程序&#xff0c;都离不开编程软件的贡献&#xff0c;其中python占据了半壁江山&#xff0c;随着大家对python的重视&#xff0c;python即将进入中学课堂&#xff0c;这究竟是好…

用动态规划算法求解最少硬币问题 c语言,动态规划算法求解硬币找零问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼看着这代码怎么这么熟悉。package 动态规划找零;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int change;change scan.nextInt();int[] coins …

git命令行使用

* git branch : 查看本地分支 * git branch -r : 查看远程分支 * git branch -a : 查看全部分支 * git branch name : 本地新建分支 * git checkout name : 切换到本地 name 分支 * git pull origin name : 从远程 name 拉取代码 * git merge name : 合并name * git diff : 查看…

8.对Hello World程序的深入

Welcome.java public class Welcome{public static void main(String[] args){System.out.println("Hello World,I am Java!");}}1、Java对大小写敏感。如果出现了大小写拼写错误&#xff0c;程序无法运行。 关键字class表明Java程序中的全部内容都包含在类中&…

python整数类型没有取值范围限制_详解Python中6种数据类型

Python中数据类型主要有六种&#xff1a;数字类型&#xff0c;字符串类型&#xff0c;元组类型&#xff0c;列表类型&#xff0c;文件类型和字典类型&#xff0c;我们今天先介绍前四种类型。 假如在Python程序中&#xff0c;出现了“010”&#xff0c;那么这个“010”到底是什么…