Django16-cache缓存

一、介绍

当用户访问某个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

 

上一篇:cinder glusterfs配置操作


下一篇:python3.5+Django2.2+pymysql+mysql