一、Django六种缓存方式(都是在settings中设置)
1、开发调试(开发调试使用,实际不做任何操作)
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 可用于‘KEY_FUNCTION'
def default_key_func(key, key_prefix, version):
"""
自定义生成key的函数
"""
return '%s:%s:%s' % (key_prefix, version, key)
def get_key_func(key_func):
"""
如果key_func是空
默认使用 default_key_func
否则,则使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
2、内存缓存
# 此缓存将内容保存至内存的变量中
# 配置:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake', #设置一个唯一值
}
}
# 注:其他配置同开发调试版本,就是将开发调试版本里面的这几句换成上面这个即可
3、文件缓存(适合小网站)
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache', #缓存文件路径
}
}#其他配置跟开发调试一样
4、数据库
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table', # 数据库表
}
}#其他设置跟开发调试的一样
5.1、Memcache缓存(python-memcached模块)
#方式1
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211', #指定缓存服务器IP地址和端口
}
}
#方式2
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', # 指定指定局域网内的主机名加socket套接字为Memcache缓存服务器
'LOCATION': 'unix:/tmp/memcached.sock',
}
}
# 方式3
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [ #指定一台或多台主机IP地址和端口为缓存服务器
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
# 方式4
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
#以元组的形式,第一个放缓存服务器的IP跟端口
#第二个参数放权重
('172.19.26.240:11211',5),
('172.19.26.242:11211',1)
]
}
}
# 注:其他配置同开发调试版本,就是将开发调试版本里面的这几句换成上面这个即可
5.2、Memcache缓存(pylibmc模块)
#方式1
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211', #指定IP和端口为缓存服务器
}
}
# 方式2
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
#指定局域网内的主机名加socket套接字为Memcache缓存服务器
'LOCATION': '/tmp/memcached.sock',
}
}
#方式3
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': [
#分布式缓存,程序会把以下多台服务器当作一个单独的缓存,
#不会再每台服务器上复制缓存值
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
# 注:其他配置同开发调试版本,就是将开发调试版本里面的这几句换成上面这个即可
6、Redis缓存(需要安装django-redis)
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
# "PASSWORD": "密码",
}
}
}# 视图中操作
from django_redis import get_redis_connection
conn = get_redis_connection("default")
二、缓存应用
1、前后端混合开发使用
(1)全站缓存
在settings文件中的中间件最上跟最下分别配置一个update,fetch中间件
MIDDLEWARE = [
# Update必须放在第一个,
'django.middleware.cache.UpdateCacheMiddleware',
# 其他中间件...
#Fetch必须放在最后一个
'django.middleware.cache.FetchFromCacheMiddleware',
]
(2)单页面缓存
#方法一:在视图函数上加装饰器
from django.views.decorators.cache import cache_page
@cache_page(5) #缓存5秒
def test(request):
ctime=time.time()
return render(request,'test.html',locals())
#方法二:在路由上配置装饰器
from django.views.decorators.cache import cache_page
urlpatterns=[
url(r'test',cache_page(5)(views.test)),
]
(3)页面局部缓存
# a. 引入TemplateTag
{% load cache %}
# b. 使用缓存
{% cache 5000 缓存key %}
缓存内容
{% endcache %}
#例子:
{% load cache %}
# key可以随便取
{% cache 10 'name' %}
<h2>{{ ctime }}</h2>
{% endcache %}
2、前后端分离的使用
from django.core.cache import cache
cache.set('key',value可以是任意数据类型)
cache.get('key')
#例子
from django.core.cache import cache
def test(request):
if cache.get('key'):
ctime=cache.get('key')
else:
ctime=time.time()
cache.set('key',ctime)
return render(request,'test.html',locals())