Django-緩存
阿新 • • 發佈:2017-09-24
最大 cati highlight 網站 直接 inf ont 引擎 -s
2、內存緩存的配置
3、文件緩存的配置
4、Memcache緩存(python-memcached模塊或者pylibmc模塊)
Django緩存
由於Django是動態網站,所有每次請求均會去數據進行相應的操作,當程序訪問量大時,耗時必然會更加明顯,最簡單解決方式是使用:緩存,緩存將一個某個views的返回值保存至內存或者memcache中,5分鐘內再有人來訪問時,則不再去執行view中的操作,而是直接從內存或者Redis中之前緩存的內容拿到,並返回。
Django中提供了6種緩存方式:
- 開發調試
- 內存
- 文件
- 數據庫
- Memcache緩存(python-memcached模塊)
- Memcache緩存(pylibmc模塊)
# 此為開始調試用,實際內部不做任何操作 # 配置: 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】) } } # 自定義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
# 此緩存將內容保存至內存的變量中 # 配置: CACHES = { ‘default‘: { ‘BACKEND‘: ‘django.core.cache.backends.locmem.LocMemCache‘, ‘LOCATION‘: ‘unique-snowflake‘, ‘TIMEOUT‘: 300, # 緩存超時時間(默認300,None表示永不過期,0表示立即過期) ‘OPTIONS‘: { ‘MAX_ENTRIES‘: 300, # 最大緩存個數(默認300) ‘CULL_FREQUENCY‘: 3, # 緩存到達最大個數之後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) } } } # 註:其他配置同開發調試版本
# 此緩存將內容保存至文件 # 配置: CACHES = { ‘default‘: { ‘BACKEND‘: ‘django.core.cache.backends.filebased.FileBasedCache‘, ‘LOCATION‘: ‘D:\cache‘, ‘TIMEOUT‘: 300, # 緩存超時時間(默認300,None表示永不過期,0表示立即過期) ‘OPTIONS‘: { ‘MAX_ENTRIES‘: 300, # 最大緩存個數(默認300) ‘CULL_FREQUENCY‘: 3, # 緩存到達最大個數之後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) } } } # 註:其他配置同開發調試版本
# 此緩存使用python-memcached模塊連接memcache # 使用pylibmc模塊連接memcache的用法也是一樣的,替換導入的MemcachedCache為PyLibMCCache即可 CACHES = { ‘default‘: { ‘BACKEND‘: ‘django.core.cache.backends.memcached.MemcachedCache‘, ‘LOCATION‘: ‘127.0.0.1:11211‘, ‘OPTIONS‘: { ‘MAX_ENTRIES‘: 300, # 最大緩存個數(默認300) ‘CULL_FREQUENCY‘: 3, # 緩存到達最大個數之後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) } } } CACHES = { ‘default‘: { ‘BACKEND‘: ‘django.core.cache.backends.memcached.MemcachedCache‘, ‘LOCATION‘: ‘/tmp/memcached.sock‘, ‘OPTIONS‘: { ‘MAX_ENTRIES‘: 300, # 最大緩存個數(默認300) ‘CULL_FREQUENCY‘: 3, # 緩存到達最大個數之後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) } } } CACHES = { ‘default‘: { ‘BACKEND‘: ‘django.core.cache.backends.memcached.MemcachedCache‘, ‘LOCATION‘: [ ‘172.19.26.240:11211‘, ‘172.19.26.242:11211‘, # (‘172.19.26.240:11211‘,5), # 多個是分布式,元組的形式,分布式分配權重 # (‘172.19.26.242:11211‘,1), ], ‘OPTIONS‘: { ‘MAX_ENTRIES‘: 300, # 最大緩存個數(默認300) ‘CULL_FREQUENCY‘: 3, # 緩存到達最大個數之後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3) } } } # 註:其他配置同開發調試版本二、應用 1、全站緩存:粒度大
MIDDLEWARE = [ ‘django.middleware.cache.UpdateCacheMiddleware‘, ‘django.middleware.security.SecurityMiddleware‘, ‘django.contrib.sessions.middleware.SessionMiddleware‘, ‘django.middleware.common.CommonMiddleware‘, ‘django.middleware.csrf.CsrfViewMiddleware‘, ‘django.contrib.auth.middleware.AuthenticationMiddleware‘, ‘django.contrib.messages.middleware.MessageMiddleware‘, ‘django.middleware.clickjacking.XFrameOptionsMiddleware‘, ‘django.middleware.cache.FetchFromCacheMiddleware‘, ] CACHE_MIDDLEWARE_SECONDS = 52、單獨視圖函數:粒度適中
from django.views.decorators.cache import cache_page @cache_page(5) def test(request): # user_list = models.UserInfo.objects.all() ctime = time.time() return render(request,‘test.html‘,{‘ctime‘:ctime})
3、局部模板:粒度小
{% load cache %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>{{ ctime }}</h1> {% cache 5 ‘xxxxxfdfdf‘ %} <h1>{{ ctime }}</h1> {% endcache %} </body> </html>
Django-緩存