欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django 緩存配置Redis使用詳解

 更新時(shí)間:2019年07月23日 09:38:00   作者:little_pd  
這篇文章主要介紹了Django 緩存配置Redis使用詳解,緩存是將一些常用的數(shù)據(jù)保存內(nèi)存或者memcache中,在一定的時(shí)間內(nèi)有用戶來訪問這些數(shù)據(jù)時(shí),則不再去執(zhí)行數(shù)據(jù)庫及渲染等操作,而是直接從內(nèi)存或memcache的緩存中去取得數(shù)據(jù),然后返回給用戶

一、cache介紹

由于Django是動(dòng)態(tài)網(wǎng)站,所有每次請求均會(huì)去數(shù)據(jù)進(jìn)行相應(yīng)的操作,當(dāng)程序訪問量大時(shí),耗時(shí)必然會(huì)更加明顯,最簡單解決方式是使用:緩存。

緩存工作原理:緩存是將一些常用的數(shù)據(jù)保存內(nèi)存或者memcache中,在一定的時(shí)間內(nèi)有用戶來訪問這些數(shù)據(jù)時(shí),則不再去執(zhí)行數(shù)據(jù)庫及渲染等操作,而是直接從內(nèi)存或memcache的緩存中去取得數(shù)據(jù),然后返回給用戶。

Django提供了6種緩存方式:

  • 開發(fā)調(diào)試緩存
  • 內(nèi)存緩存
  • 文件緩存
  • 數(shù)據(jù)庫緩存
  • Memcache緩存(使用python-memcached模塊)
  • Memcache緩存(使用pylibmc模塊)

這里不多介紹,有興趣的可以去看看官方文檔:https://docs.djangoproject.com/en/dev/topics/cache/

二、Redis緩存

要想在Django配置Redis緩存,則需要先安裝依賴:

pip3 install django-redis

settings.py配置:

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": "密碼",
    }
  }
}

視圖中連接(手動(dòng)操作redis):

from django.shortcuts import HttpResponse
from django_redis import get_redis_connection

def index(request):
  r = get_redis_connection("default")
  r.hmset("name_a", {"key_a": "value_a", "key_b": "value_b"})
  return HttpResponse("設(shè)置redis")

def order(request):
  r = get_redis_connection("default")
  val = r.hmget("name_a", ["key_a", "key_b"])
  print(val) # [b'value_a', b'value_b']
  return HttpResponse("獲取redis")

三、應(yīng)用

全站使用緩存

使用中間件,經(jīng)過一系列的認(rèn)證等操作,如果內(nèi)容在緩存中存在,則使用 FetchFromCacheMiddleware 獲取內(nèi)容并返回給用戶,當(dāng)返回給用戶之前,判斷緩存中是否已經(jīng)存在,如果不存在則UpdateCacheMiddleware 會(huì)將緩存保存至緩存,從而實(shí)現(xiàn)全站緩存。

MIDDLEWARE = [
  'django.middleware.cache.UpdateCacheMiddleware', # 放在第一
  # 其他中間件...
  'django.middleware.cache.FetchFromCacheMiddleware', # 放在最后
]

CACHE_MIDDLEWARE_ALIAS = ""     # 用于存儲(chǔ)的緩存別名
CACHE_MIDDLEWARE_SECONDS = 600    # 每個(gè)頁面應(yīng)緩存的秒數(shù) 
CACHE_MIDDLEWARE_KEY_PREFIX = ""   # 如果使用相同的Django安裝在多個(gè)站點(diǎn)之間共享緩存,請將其設(shè)置為站點(diǎn)名稱或此Django實(shí)例特有的其他字符串,以防止發(fā)生密鑰沖突。如果你不在乎,請使用空字符串。

測試

from django.shortcuts import HttpResponseimport time
def index(request):
  t = time.time()
  return HttpResponse("時(shí)間:{}".format(str(t)))

def home(request):
  t = time.time()
  return HttpResponse("時(shí)間:{}".format(str(t)))

可以發(fā)現(xiàn),index或者h(yuǎn)ome頁面第一次返回的時(shí)間是多少,往后10分鐘以內(nèi),時(shí)間都是不變的。

單獨(dú)視圖緩存(記得取消全站緩存中間件配置)

from django.shortcuts import HttpResponse
from django.views.decorators.cache import cache_page
import time

@cache_page(60 * 10)
def index(request):
  t = time.time()
  return HttpResponse("時(shí)間:{}".format(str(t)))

def home(request):
  t = time.time()
  return HttpResponse("時(shí)間:{}".format(str(t)))

這次,index頁面第一次訪問返回的時(shí)間需要過10分鐘再次訪問才能變化,而home頁面返回的時(shí)間是時(shí)時(shí)刻刻變化的。

模板局部視圖使用

# 1.引入TemplateTag
  {% load cache %}

# 2.使用緩存
  {% cache 600 name %} # 緩存超時(shí)(秒) 和 緩存片段的名稱(名稱按原樣使用)
    緩存內(nèi)容
  {% endcache %}

示例:

# views.py
from django.shortcuts import render
import time

def index(request):
  t = time.time()
  return render(request, "index.html", {"t": t})
# index.html
<!DOCTYPE html>
<html lang="zh-cn">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

{% load cache %}

{% cache 10 current_time %}
  <h1>{{ t }}</h1>
{% endcache %}

</body>
</html>

四、使用場景說明

# 一般來說我們用 Django 來搭建一個(gè)網(wǎng)站,要用到數(shù)據(jù)庫等。

from django.shortcuts import render
def index(request):
  # 讀取數(shù)據(jù)庫等 并渲染到網(wǎng)頁
  # 數(shù)據(jù)庫獲取的結(jié)果保存到 queryset 中
  return render(request, 'index.html', {'queryset':queryset})
# 像這樣每次訪問都要讀取數(shù)據(jù)庫,一般的小網(wǎng)站沒什么問題,當(dāng)訪問量非常大的時(shí)候, 就會(huì)有很多次的數(shù)據(jù)庫查詢,肯定會(huì)造成訪問速度變慢,服務(wù)器資源占用較多等問題。

#--------------------------------------------------------------------

from django.shortcuts import render
from django.views.decorators.cache import cache_page
 
@cache_page(60 * 10) # 秒數(shù),這里指緩存10分鐘,不直接寫600是為了提高可讀性
def index(request):
  # 讀取數(shù)據(jù)庫等 并渲染到網(wǎng)頁
  return render(request, 'index.html', {'queryset':queryset})
# 當(dāng)使用了cache后,訪問情況變成了如下:訪問一個(gè)網(wǎng)址時(shí), 嘗試從 cache 中找有沒有 緩存內(nèi)容,如果需要的數(shù)據(jù)在緩存中沒有緩存內(nèi)容,則去數(shù)據(jù)庫取,渲染返回頁面,同時(shí) 將這些數(shù)據(jù)保存在緩存中,在一定時(shí)間內(nèi),當(dāng)用戶再次訪問頁面時(shí),就沒必要去數(shù)據(jù)庫取 了,直接從緩存中拿到數(shù)據(jù)。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript中的模擬事件和自定義事件實(shí)例分析

    JavaScript中的模擬事件和自定義事件實(shí)例分析

    這篇文章主要介紹了JavaScript中的模擬事件和自定義事件,結(jié)合實(shí)例形式分析了JavaScript模擬事件和自定義事件相關(guān)操作步驟、實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Python的進(jìn)程,線程和協(xié)程實(shí)例詳解

    Python的進(jìn)程,線程和協(xié)程實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了Python進(jìn)程,線程和協(xié)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Pyinstaller加密打包成反編譯可執(zhí)行文件

    Pyinstaller加密打包成反編譯可執(zhí)行文件

    這篇文章主要為大家介紹了Pyinstaller加密打包成可執(zhí)行文件方法示例。有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python學(xué)習(xí)筆記基本數(shù)據(jù)結(jié)構(gòu)之序列類型list tuple range用法分析

    Python學(xué)習(xí)筆記基本數(shù)據(jù)結(jié)構(gòu)之序列類型list tuple range用法分析

    這篇文章主要介紹了Python學(xué)習(xí)筆記基本數(shù)據(jù)結(jié)構(gòu)之序列類型list tuple range用法,結(jié)合具體實(shí)例形式分析了Python序列類型list tuple range基本概念、定義與使用技巧,需要的朋友可以參考下
    2019-06-06
  • 利用Python實(shí)現(xiàn)Picgo圖床工具

    利用Python實(shí)現(xiàn)Picgo圖床工具

    這篇文章主要介紹了如何利用Python實(shí)現(xiàn)Picgo圖床工具,PyPicGo?是一款圖床工具,是PicGo是Python版實(shí)現(xiàn),并支持各種插件自定義插件,目前PyPicGo自帶了gitee、github、SM.MS和七牛云圖傳,以及rename、notify和typora等插件,下面來看文章內(nèi)容介紹,需要的朋友可以參考一下
    2021-11-11
  • python中property和setter裝飾器用法

    python中property和setter裝飾器用法

    今天小編就為大家分享一篇python中property和setter裝飾器用法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Pytorch中的學(xué)習(xí)率衰減及其用法詳解

    Pytorch中的學(xué)習(xí)率衰減及其用法詳解

    這篇文章主要介紹了Pytorch中的學(xué)習(xí)率衰減及其用法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 使用Python快速提取PPT中的文本內(nèi)容的代碼示例

    使用Python快速提取PPT中的文本內(nèi)容的代碼示例

    本文將介紹如何使用Python程序提取PowerPoint演示文稿中的文本內(nèi)容,包括幻燈片中的主體文本、幻燈片備注文本以及幻燈片,文中通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-03-03
  • django 自定義過濾器的實(shí)現(xiàn)

    django 自定義過濾器的實(shí)現(xiàn)

    這篇文章主要介紹了django 自定義過濾器的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • 在pytorch 中計(jì)算精度、回歸率、F1 score等指標(biāo)的實(shí)例

    在pytorch 中計(jì)算精度、回歸率、F1 score等指標(biāo)的實(shí)例

    今天小編就為大家分享一篇在pytorch 中計(jì)算精度、回歸率、F1 score等指標(biāo)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評論