緩存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.pswp.cn/news/538808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538808.shtml
英文地址,請注明出處:http://en.pswp.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”到底是什么…