一、介绍
当用户访问某个url时,系统会尝试多缓存中查找内容,如果缓存中存在页面内容,则直接返回缓存中的页面,如果缓存中不存在,就需要通过后台代码逻辑如数据库查询等,将生成的网页内容保存到缓存中以备下一次使用,同时将网页内容返回给用户。
Django提供多种缓存类型:Memcached缓存,数据库缓存,文件系统缓存,局部内存缓存和自定义缓存等。
'django.core.cache.backends.locmem.LocMemCache'
'django.core.cache.backends.memcached.MemcachedCache'
'django.core.cache.backends.db.DatabaseCache'
'django.core.cache.backends.filebased.FileBasedCache'
'django.core.cache.backends.dummy.DummyCache'
'django.core.cache.backends.memcached.PyLibMCCache'
官方资料
https://docs.djangoproject.com/en/3.1/topics/cache/
二、settins配置
1、Memcached
Memcached是Django支持的最快、最高效的缓存类型,它是一种完全基于内存的缓存服务器,以减少数据库的访问并显著提高网站的性能。
Memcached作为一个守护进程运行,并分配了一定数量的RAM。它提供一个快速的接口用于在缓存中添加、检索和删除数据。所有数据都直接存储在内存中,因此比数据库或文件系统存储等基于硬盘的缓存方式更快。
使用该缓存类型要先安装Memcached程序,并安装Python与Memcached之间的接口库,如python-memcached和pylibmc等。
安装以后启动Memcached,在django中用python-memcached连接。
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } }
2、数据库缓存
使用数据库作为缓存,会将缓存的数据保存在指定的表中,LOCATION为表名:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', } } 然后在数据库中创建该表: python manage.py createcachetable
3、其他几种缓存方式可以查看官方文档
三、Django也支持redis缓存
https://github.com/jazzband/django-redis
1、安装redis
pip install django-redis
2、配置settings文件
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } }
如果redis需要用户名密码认证的话,有两种写法
第一种 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://username:password@127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } 第二种 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://username@127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "password" } } }
四、views配置
方式一:使用cache_page装饰器实现缓存,必须传入一个timeout的位置参数
from django.views.decorators.cache import cache_page @cache_page(60) def user_list(request): users = models.User.objects.all() time.sleep(5) #模拟响应过程 return render(request, 'user_list.html', {'users': users})
方式二:手动配置缓存信息
from django.core.cache import cache def user_list(request): result = cache.get('devops_cache') if result: return HttpResponse(result) users = models.User.objects.all() time.sleep(5) res = render(request, 'user_list.html', {'users': users}) cache.set('devops_cache', res, timeout=60) return res