Django使用redis实现缓存

Posted zhuangshenhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django使用redis实现缓存相关的知识,希望对你有一定的参考价值。

 1. 安装

pip3 install django-redis

 

2. 配置(settings.py文件)

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",  # 引擎
     "TIMEOUT": 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期
"LOCATION": "redis://127.0.0.1:6379/1", # 1表是代表那个库 "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "mysecret", # 密码 "CONNECTION_POOL_KWARGS": {"max_connections": 100} # 连接池最大连接数 } } }

 注意: 在settings.py配置完后执行  python manage.py createcachetable

 

3. 缓存种类

  3.1views视图缓存

# 视图缓存
from django.shortcuts import render
from django.views.decorators.cache import cache_page
from cache.models import Foo


# 在需要缓存的视图上添加装饰器, 参数是设置timeout 超时时间, 单位是秒, 
@cache_page(60)
def index(request):
    bar = Foo.objects.all()
    return render(request, cache/index.html, {bar: bar})

 

  3.2模板缓存

步骤I. 引入TemplateTag
        {% load cache %}
步骤II. 使用缓存
        {% cache 5000 缓存key %}
            缓存内容
        {% endcache %}
{% load cache %}
{% cache 500 ‘cache_name‘ %}
    <div>container</div>
{% endcache %}

 

  3.3站点缓存(缓存整个网站)

MIDDLEWARE = [
    # 站点缓存 , 注意必须在第一个位置
    django.middleware.cache.UpdateCacheMiddleware,
    # ...
    # 站点缓存, 注意必须在最后一个位置
    django.middleware.cache.FetchFromCacheMiddleware,
]

 

具体操作

配置:

    # 缓存配置
    CACHES = {
            "default": {
                # 引擎
                "BACKEND": "django_redis.cache.RedisCache",
                # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
                TIMEOUT: 300,                                               
                "LOCATION": "redis://127.0.0.1:6379/1",
                "OPTIONS": {
                    "CLIENT_CLASS": "django_redis.client.DefaultClient",
                    # "PASSWORD": "mysecret"
                }
            }
        }


路由:

    # 缓存测试
    url(r^cache1/$,  views.cache1,name="cache1"),
    url(r^cache2/$,  views.cache2,name="cache2"),

视图:

    import datetime
    from django.views.decorators.cache import cache_page
    from django.core.cache import cache

    # 缓存整个视图函数
    @cache_page(10)
    def cache1(request):
        
        t =  datetime.datetime.now()
        return HttpResponse(t)

    # 在视图函数中缓存一部分内容
    def cache2(request):


        # 判断缓存是否存在数据
        a = cache.get(time,None)
        if a:
            print(缓存中存在数据)
            print(a)
        else:
            # 从模型中获取的数据
            a =  datetime.datetime.now()
            cache.set(time,a,10)
            print(缓存中,不存在数据,查询并缓存)
            print(a)

        # 不需要缓存的数据
        t =  datetime.datetime.now()
        print(t)

        return HttpResponse(t)

以上是关于Django使用redis实现缓存的主要内容,如果未能解决你的问题,请参考以下文章

学习猿地 python教程 django教程9 Django使用redis实现缓存

Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化

django+redis实现底层的缓存api

如何在 Django 中显式重置模板片段缓存?

django视图缓存的实现

django-redis-cache 和 django-redis 用于使用 Django 进行 redis 缓存的区别?