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

簡單了解django緩存方式及配置

 更新時(shí)間:2019年07月19日 11:08:48   作者:一路向北_聽風(fēng)  
這篇文章主要介紹了簡單了解django緩存概述及配置,由于Django是動(dòng)態(tài)網(wǎng)站,所有每次請(qǐng)求均會(huì)去數(shù)據(jù)進(jìn)行相應(yīng)的操作,當(dāng)程序訪問量大時(shí),耗時(shí)必然會(huì)更加明顯,最簡單解決方式是使用:緩存,需要的朋友可以參考下

前言

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

1. 緩存的概述:

緩存將一個(gè)某個(gè)views的返回值保存至內(nèi)存或者memcache中,5分鐘內(nèi)再有人來訪問時(shí),則不再去執(zhí)行view中的操作,而是直接從內(nèi)存或者Redis中之前緩存的內(nèi)容拿到,并返回。

2. Django中提供了6種緩存方式:

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

2.1 配置

開發(fā)調(diào)試

# 此為開始調(diào)試用,實(shí)際內(nèi)部不做任何操作
 # 配置:
  CACHES = {
   'default': {
    'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  # 引擎
    'TIMEOUT': 300,            # 緩存超時(shí)時(shí)間(默認(rèn)300,None表示永不過期,0表示立即過期)
    'OPTIONS':{
     'MAX_ENTRIES': 300,          # 最大緩存?zhèn)€數(shù)(默認(rèn)300)
     'CULL_FREQUENCY': 3,          # 緩存到達(dá)最大個(gè)數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)3)
    },
    'KEY_PREFIX': '',            # 緩存key的前綴(默認(rèn)空)
    'VERSION': 1,             # 緩存key的版本(默認(rèn)1)
    'KEY_FUNCTION' 函數(shù)名           # 生成key的函數(shù)(默認(rèn)函數(shù)會(huì)生成為:【前綴:版本:key】)
   }
  }


 # 自定義key
 def default_key_func(key, key_prefix, version):
  """
  Default function to generate keys.

  Constructs the key used by all other methods. By default it prepends
  the `key_prefix'. KEY_FUNCTION can be used to specify an alternate
  function 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_func
   else:
    return import_string(key_func)
  return default_key_func

內(nèi)存

# 此緩存將內(nèi)容保存至內(nèi)存的變量中
 # 配置:
  CACHES = {
   'default': {
    'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    'LOCATION': 'unique-snowflake',
   }
  }

 # 注:其他配置同開發(fā)調(diào)試版本

文件

# 此緩存將內(nèi)容保存至文件
 # 配置:

  CACHES = {
   'default': {
    'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
    'LOCATION': '/var/tmp/django_cache',
   }
  }
 # 注:其他配置同開發(fā)調(diào)試版本

數(shù)據(jù)庫

# 此緩存將內(nèi)容保存至數(shù)據(jù)庫

 # 配置:
  CACHES = {
   'default': {
    'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
    'LOCATION': 'my_cache_table', # 數(shù)據(jù)庫表
   }
  }

 # 注:執(zhí)行創(chuàng)建表命令 python manage.py createcachetable

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',
   ]
  }
 }

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',
   ]
  }
 }

Redis緩存(依賴:pip3 install django-redis)

from django_redis import get_redis_connection
conn = get_redis_connection("default")

2.2 應(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 = ""
 CACHE_MIDDLEWARE_SECONDS = ""
 CACHE_MIDDLEWARE_KEY_PREFIX = ""

單獨(dú)視圖緩存

方式一:
  from django.views.decorators.cache import cache_page

  @cache_page(60 * 15)
  def my_view(request):
   ...

 方式二:
  from django.views.decorators.cache import cache_page

  urlpatterns = [
   url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),
  ]

局部視圖使用

a. 引入TemplateTag

  {% load cache %}

 b. 使用緩存

  {% cache 5000 緩存key %}
   緩存內(nèi)容
  {% endcache %}

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

相關(guān)文章

最新評(píng)論