配置缓存
CACHES = {
#默认缓存
'default' : {
'BACKEND' : 'djago_redis.cache.RedisCache',
'LOCATION' : [
'redis://1.2.3.4:6379/0',
],
'KEY_PREFIX' : 'fangtx',
'OPTIONS' : {
'CLIENT_CLASS':'django_redis.client.DefaultClient',
'CONNECTION_POOL_KWARGS' : {
'max_connections' : 1000,
},
'PASSWORD' : '1qaz2wsx',
}
},
#页面缓存
'page' : {
'BACKEND' : 'djago_redis.cache.RedisCache',
'LOCATION' : [
'redis://1.2.3.4:6379/1',
],
'KEY_PREFIX' : 'page',
'OPTIONS' : {
'CLIENT_CLASS':'django_redis.client.DefaultClient',
'CONNECTION_POOL_KWARGS' : {
'max_connections' : 500,
},
'PASSWORD' : '1qaz2wsx',
}},
# 会话缓存
'session' = {
'BACKEND' : 'djago_redis.cache.RedisCache',
'LOCATION' : [
'redis://1.2.3.4:6379/2',
],
'KEY_PREFIX' : 'session',
'TIMEOUT' : 1209600,
'OPTIONS' : {
'CLIENT_CLASS':'django_redis.client.DefaultClient',
'CONNECTION_POOL_KWARGS' : {
'max_connections' : 2000,
},
'PASSWORD' : '1qaz2wsx',
}},
# 接口数据缓存
'api' = {
'BACKEND' : 'djago_redis.cache.RedisCache',
'LOCATION' : [
'redis://1.2.3.4:6379/3',
],
'KEY_PREFIX' : 'api',
'OPTIONS' : {
'CLIENT_CLASS':'django_redis.client.DefaultClient',
'CONNECTION_POOL_KWARGS' : {
'max_connections' : 500,
},
'PASSWORD' : '1qaz2wsx',
}
},
}
说明:通过Redis底层提供的额多个数据库用来隔离缓存数据有助于缓存数据的管理,如果配置了Redis的主从复制(读写分离),LOCATION列表中可以配置多个Redis连接,第一个被视为master用来进行读写操作,后面的被视为slave用来进行读操作。
全站缓存
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_SECONDS = 300
CACHE_MIDDLEWARE_KEY_PREFIX = 'django:cache'
视图层缓存
from django.views.decorators.cache import cache_page
from django.views.decorators.vary import vary_on_cookie
@cache_page(timeout = 60 * 15, cache = 'page')
@vart_on_cookie
def my_view(request):
pass
from django.views.decorators.cache import cache_page
urlpatterns = [
url(r'^foo/([0-9]{1,2})/$',cache_page(60 * 15)(my_view)),
]
其他内容
1.模板片段缓存。
- {% load cache %}
- {% cache %} / {% endcache %}
2.使用底层API访问缓存。
from django.core.cache import cache
cache.set('my_key', 'hello,world', 30)
cache.get('my_key')
cache.clear()
from django.core.cache import caches
cache1 = cache['page']
cache2 = caceh['page']
cache1 is cache2 # True
cache3 = cache['session']
cache2 is cache3 # False
from django_redis import get_redis_connection
redis_client = get_redis_connection()
redis_client.hgetall()