最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django 緩存配置Redis使用詳解

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

一、cache介紹

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

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

Django提供了6種緩存方式:

  • 開發(fā)調試緩存
  • 內存緩存
  • 文件緩存
  • 數據庫緩存
  • 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": "密碼",
    }
  }
}

視圖中連接(手動操作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("設置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")

三、應用

全站使用緩存

使用中間件,經過一系列的認證等操作,如果內容在緩存中存在,則使用 FetchFromCacheMiddleware 獲取內容并返回給用戶,當返回給用戶之前,判斷緩存中是否已經存在,如果不存在則UpdateCacheMiddleware 會將緩存保存至緩存,從而實現全站緩存。

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

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

測試

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

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

可以發(fā)現,index或者home頁面第一次返回的時間是多少,往后10分鐘以內,時間都是不變的。

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

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("時間:{}".format(str(t)))

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

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

模板局部視圖使用

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

# 2.使用緩存
  {% cache 600 name %} # 緩存超時(秒) 和 緩存片段的名稱(名稱按原樣使用)
    緩存內容
  {% 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 來搭建一個網站,要用到數據庫等。

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 使用pytorch 篩選出一定范圍的值

    使用pytorch 篩選出一定范圍的值

    這篇文章主要介紹了使用pytorch 篩選出一定范圍的值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • TensorFlow 多元函數的極值實例

    TensorFlow 多元函數的極值實例

    今天小編就為大家分享一篇TensorFlow 多元函數的極值實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Django 源碼WSGI剖析過程詳解

    Django 源碼WSGI剖析過程詳解

    這篇文章主要介紹了Django 源碼WSGI剖析過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • python抓取某汽車網數據解析html存入excel示例

    python抓取某汽車網數據解析html存入excel示例

    python抓取某汽車網經銷商信息網頁數據解析html,這里提供一個示例演示,大家可以根據需要分析自己網站的數據
    2013-12-12
  • PyTorch中torch.cuda.amp相關警告的解決方法

    PyTorch中torch.cuda.amp相關警告的解決方法

    在最近的寫代碼過程中,遇到了兩個與 PyTorch 的混合精度訓練相關的警告信息,torch.cuda.amp.autocast和torch.cuda.amp.GradScaler,文中通過代碼示例給大家介紹了詳細的解決方法,需要的朋友可以參考下
    2025-02-02
  • Python內置函數詳細解析

    Python內置函數詳細解析

    這篇文章主要介紹了Python內置函數詳細解析,Python?自帶了很多的內置函數,極大地方便了我們的開發(fā),下文小編總結了一些內置函數的相關內容,需要的小伙伴可以參考一下
    2022-05-05
  • python爬蟲爬取快手視頻多線程下載功能

    python爬蟲爬取快手視頻多線程下載功能

    這篇文章主要介紹了python爬蟲爬取快手視頻多線程下載功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • python os用法總結

    python os用法總結

    本篇文章給大家分享了關于python os用法的相關總結性內容,對此有學習需要朋友參考下吧。
    2018-06-06
  • django admin后管定制-顯示字段的實例

    django admin后管定制-顯示字段的實例

    這篇文章主要介紹了django admin后管定制-顯示字段的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python刪除指定目錄下的文件和文件夾的實現

    python刪除指定目錄下的文件和文件夾的實現

    在日常的辦公中,我們可以利用Python批量刪除文件和文件夾,本文就來介紹一下python刪除指定目錄下的文件和文件夾的實現,感興趣的可以了解一下
    2024-01-01

最新評論

松溪县| 客服| 太湖县| 榆树市| 白城市| 常熟市| 南皮县| 青冈县| 塔城市| 常宁市| 许昌县| 黄冈市| 仙桃市| 辽阳县| 永仁县| 成安县| 汝南县| 和静县| 冕宁县| 肃南| 吉安市| 晴隆县| 土默特左旗| 新邵县| 梅州市| 南木林县| 怀远县| 三原县| 平泉县| 通化县| 石首市| 云和县| 永修县| 武冈市| 青河县| 齐河县| 无棣县| 石棉县| 石门县| 启东市| 陆河县|