使用缓存需要在setting.py中利 配置来实现:
用文件系统缓存:
基于文件的缓存后端序列化和存储每个缓存值作为一个单独的文件。 BACKEND:指定使用的缓存系统 LOCATION: 缓存文件的存放路径
CACHES = {
'default':
{ 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定
使用文件系统
'LOCATION': '/var/tmp/django_cache', # linux保存路径
#'LOCATION': 'c:/temp/django_cache', # windows保存路径
}
}
本地内存缓存:
如果服务器内存足够大,需要缓存的内容不是非常多的话,利用本地内存缓存也是一个不错 的选
择。
CACHES = {
'default':
{ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
}
}
数据库缓存:
Django 可以把缓存保存在你的数据库里。如果你有一个快速的、专业的数据库服务器的话.
LOCATION: 数据库中表的名字
CACHES =
{
'default':
{
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
}
使用数据库缓存之前,必须用这个命令来创建缓存表:
python manage.py createcachetable 缓存表名
这条命令会自动创建Django的基于数据库缓存系统预期的特定格式的数据表,表名为LOCATION设置的
名字。
CACHES 参数:
每一个缓存系统都可以额外设置一些参数。
常用参数:TIMEOUT:缓存的默认过期时间,以秒为单位,这个参数默认是300seconds(5分钟).
OPTIONS:
MAX_ENTRIES:高速缓存允许的最大条目数,超出这个数则旧值将被删除. 这个参数默认是300.
CULL_FREQUENCY:当达到MAX_ENTRIES 的时候,被删除的条目比率。 实际比率是 1 /
CULL_FREQUENCY,默认设置是3,如果设置为2的话,那就是删除一半。
比如设置一个文件缓存系统,超时时间为60s,缓存最大条目为1000,如果遇到非法参数,django会自
动忽略掉。
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
#'LOCATION': '/var/tmp/django_cache',#linux系统路径
'LOCATION': 'c:/temp/django_cache', # windows保存路径
'TIMEOUT': 60,
'OPTIONS':
{
'MAX_ENTRIES': 1000
}
}
}
settings.py配置
CACHES = {
'default':
{
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
'TIMEOUT': 60, 'OPTIONS':
{
'MAX_ENTRIES': 1000
}
}
}
视图views.py
from django.core.cache import cache
from .models import User
def cache_users(request):
"""缓存测试视图"""
# 读缓存数据DJango缓存
user_cache = cache.get('user_cache')
if user_cache:
print("从缓存读取数据")
return HttpResponse(user_cache)
else:
print("从数据库读取数据")
user_cache = User.objects.all()
# 写数据到缓存
cache.set('user_cache', user_cache)
return HttpResponse(user_cache)
路由urls.py
path('cache/', views.cache_users),
模型models.py 使用默认的sqlite数据库
class User(models.Model):
username = models.CharField(max_length=50, verbose_name='用户名')
password = models.CharField(max_length=50, verbose_name='密码')
class Meta:
db_table = 'tb_users'
verbose_name = '用户表'
verbose_name_plural = verbose_name
def __str__(self):
return self.username