天天看點

django2.2緩存的設定

django緩存,适用于頁面經常被通路,但頁面資料不會經常改變的地方

  1. 資料庫緩存settings配置
# 資料庫緩存配置,然後python manage.py createcachetable生成緩存表
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        # 緩存表的名字
        'LOCATION': 'my_cache_table'
    }
}
           
  1. redis緩存settings配置
# redis做緩存
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://192.168.1.101:6379/2',  # redis位址(無密碼),後面表示使用第二個資料庫
        # 'LOCATION': 'redis://密碼@192.168.1.101:6379/2',  # redis位址(有密碼),後面表示使用第二個資料庫
    }
}
           

views.py,使用裝飾器緩存@cache_page(緩存時間(秒)),還有使用局部緩存

from django.views.decorators.cache import cache_page
# 緩存裝飾器,後面為時間(秒)
@cache_page(1)
def index(request):                               # 格式時間
    my_time1 = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    my_time2 = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    return render(request, 'index.html', locals())
           

HTML頁面

<h1>裝飾器緩存{{ my_time1 }}</h1>

局部緩存,要先加載緩存,2為緩存兩秒,名字随意
{% load cache %}
{% cache 2 'my' %}
     <h2>{{ my_time2 }}</h2>
{% endcache %}
           

手動設定緩存,第一次将資料庫裡的資料讀出來,渲染到也買你并儲存到緩存裡,下次請求來的時候先在緩存裡面查找資料,沒有則到再到資料庫查找

視圖函數

# 手動設定緩存
def my_cache(request):
    from django.core.cache import cache  # 手動設定緩存,導入底層的緩存
    # 首先在緩存表裡查資料
    my_data = cache.get('all_data')
    # 緩存表裡沒有再到資料庫裡查并将資料放入緩存表裡
    if not my_data:
        my_data = Data.objects.all()
        # cache可以直接把查詢結果序列化,儲存到緩存表裡
        cache.set('all_data', my_data, 20)  # cache.set(key, value, timeout(秒))
    return render(request, 'cache.html', locals())
           

HTML頁面渲染

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>T</title>
</head>
<body>
<h1>手動設定緩存</h1>
{% for data in my_data %}
    <p>{{ data.text }}</p>
{% endfor %}
</body>
</html>
           

緩存使用redis做好,redis是記憶體型資料庫,讀取速度比MySQL快了多的多的多的多,對于頻繁通路但資料不是實時更新那種可以加快通路速度。