django緩存,适用于頁面經常被通路,但頁面資料不會經常改變的地方
- 資料庫緩存settings配置
# 資料庫緩存配置,然後python manage.py createcachetable生成緩存表
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
# 緩存表的名字
'LOCATION': 'my_cache_table'
}
}
- 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>