django使用redis实现缓存

Django使用redis实现缓存
环境搭建安装

1,安装redis服务
sudo apt-get install redis-server

2,安装django组件
sudo pip3 install django-redis

Django项目配置
settings.py
    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"
            }
        }
    }


视图缓存:
使用缓存框架的更细化的方式是缓存单个视图的输出。django.views.decorators.cache

定义一个cache_page装饰器,它会自动缓存视图的响应
views.py
# 在需要缓存的视图上添加装饰器, 参数是设置timeout 超时时间, 单位是秒, 

from django.views.decorators.cache import cache_page

@cache_page(10)
def index(request):

    t =  datetime.datetime.now()

    return HttpResponse(t)

自定义缓存 :

例如,您的站点可能包含一个视图,其结果取决于几个昂贵的查询,其结果以不同的时间间隔进行更改。

在这种情况下,使用每个站点或每个视图缓存策略提供的全页缓存是不理想的,因为您不希望缓存整个结果(因为有些数据经常更改),但您仍然希望缓存很少更改的结果

在这样的情况下,Django提供了一个简单的,低层次的缓存API。

您可以缓存任何Python对象:字符串、字典、模型对象列表等等

基本语法: set(key, value, timeout) get(key)
from django.core.cache import cache

cache.set('my_key', 'hello, world!', 30)
cache.get('my_key')
模板缓存
您还可以使用cache模板标签来缓存模板片段。

为了让您的模板可以访问此标记,请放在模板的顶部附近。{ % load cache % }。

文档地址: https://docs.djangoproject.com/en/1.11/topics/cache/#template-fragment-caching
站点缓存:
缓存设置完成后,使用缓存的最简单方法是缓存整个网站

文档地址: https://docs.djangoproject.com/en/1.11/topics/cache/#the-per-site-cache


实验代码

配置:

    # 缓存配置
    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实现缓存)