• Djnago中缓存配置(redis配置案例)


    Django中提供了6种缓存方式:

    • 开发调试
    • 内存
    • 文件
    • 数据库
    • Memcache缓存(python-memcached模块)
    • Memcache缓存(pylibmc模块)

    配置文件

    # 内存
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
            'LOCATION': 'unique-snowflake',
            'TIMEOUT': 300,  # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
            'OPTIONS': {
                'MAX_ENTRIES': 100,  # 最大缓存个数(默认300)
                'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
            },
        }
    }
    

    应用

    视图中缓存

    • 视图缓存只需要加上一个cache_page即可
    from django.views.decorators.cache import cache_page
    
    
    @cache_page(5)
    def student_list(request, *args, **kwargs):
        students = models.Student.objects.all()
        print('students')
        return render(request, 'student_list.html', {'students': students})
    

    全栈缓存

    • 修改配置文件
    MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',
    		....
        'django.middleware.cache.FetchFromCacheMiddleware',
    ]
    
    #使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用 FetchFromCacheMiddleware 获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware 会将缓存保存至缓存,从而实现全站缓存。
    
    

    模板局部缓存

    • 使用内建的自定义标签
    {% load cache %}
    
    {% cache 5 'xxx' %}
    
        缓存
        {{ now }}
    
    {% endcache %}
    

    使用redis做缓存实例

    #1.安装 pip install django-redis
    #2.在stting中配置CACHES,可以设置多个缓存,根据名字使用
            CACHES = {
                "default": {
                    "BACKEND": "django_redis.cache.RedisCache",
                    "LOCATION": "redis://127.0.0.1:6379",
                    "OPTIONS": {
                        "CLIENT_CLASS": "django_redis.client.DefaultClient",
                        "CONNECTION_POOL_KWARGS": {"max_connections": 100}
                        # "PASSWORD": "密码",
                    }
                }
            },
            #另添加缓存
            "JERD": { }
    #3.根据名字去连接池中获取连接,视图中连接(手动操作redis)
    from django.shortcuts import HttpResponse
    from django_redis import get_redis_connection
    
    def index(request):
        r = get_redis_connection("default")
        r.hmset("name_a", {"key_a": "value_a", "key_b": "value_b"})
        return HttpResponse("设置redis")
    
    def order(request):
        r = get_redis_connection("default")
        val = r.hmget("name_a", ["key_a", "key_b"])
        print(val)  # [b'value_a', b'value_b']
        return HttpResponse("获取redis")
    
    中间件:全站使用缓存
    
    MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',  # 放在第一
        # 其他中间件...
        'django.middleware.cache.FetchFromCacheMiddleware',  # 放在最后
    ]
    
    CACHE_MIDDLEWARE_ALIAS = ""          # 用于存储的缓存别名
    CACHE_MIDDLEWARE_SECONDS = 600       # 每个页面应缓存的秒数 
    CACHE_MIDDLEWARE_KEY_PREFIX = ""     # 如果使用相同的Django安装在多个站点之间共享缓存,请将其设置为站点名称或此Django实例特有的其他字符串,以防止发生密钥冲突。如果你不在乎,请使用空字符串。
    
  • 相关阅读:
    Django 同步数据库的时候app中的models的表没有成功创建
    mysql 个人博客应用的建表和相关查询
    lambda(),map(),filter()
    用小白鼠找毒药
    python 汉诺塔问题
    灰色预测
    python可视化图标
    exel数据可视化
    543. 二叉树的直径
    236. 二叉树的最近公共祖先
  • 原文地址:https://www.cnblogs.com/bigox/p/11587099.html
Copyright © 2020-2023  润新知