zoukankan      html  css  js  c++  java
  • Django之缓存配置

     01-什么是缓存

    缓存(cache),其作用是缓和较慢存储的高频次请求,简单来说,就是加速满存储的访问效率。

    02-几种缓存配置

    # 内存缓存:local-memory caching
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
            'LOCATION': 'unique-snowflake',
        }
    }
    
    # 文件系统缓存:filessystem caching
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
            'LOCATION': '/var/tem/django_cache',
        }
    }

    03-memcached应用

    这是Django推荐的缓存系统,也是分布式内存对象缓存系统(注意,它的分布式逻辑在客户端)。Django内置支持,集成度比较好。

    安装:

    pip install python-memcached

    配置settings.py

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': [
                '127.0.0.1:8000',
            ]
        }
    }
    
    # 在MIDDLEWARE中加上,
    MIDDLEWARE = [
    
        'django.middleware.cache.UpdateCacheMiddleware',
    
     
        'django.middleware.common.CommonMiddleware',
    ...
    
        'django.middleware.cache.FetchFromCacheMiddleware',
    
    ]

    在views.py

    # 方法1:
    from django.views.decorators.cache import cache_page
    
    # 首页  60*15表示缓存15分钟
    @cache_page(60*15)
    def index(request):
        pass
    
    # 方法2:直接在路由urls.py中实现
    from django.views.decorators.cache import cache_page
    
    urlpatterns = [
        path('index/', cache_page(60*15)(views.index)),
    
    ]

    如果只想缓存某个字段的话

    from django.core.cache import cache
    
    def test(request):
        key = '我是缓存值'
        time= 60
        result= cache.get(key)
        if not result:
            result = ''
            cache.set(key, result, time)
        return result

     04-配置Redis缓存

    # 安装包
    pip install django-redis==4.9.0
    pip install hiredis==0.2.0

    同时安装了hiredis,其作用是提升Redis解析性能。

    在settings.py配置缓存

    REDIS_URL = '127.0.0.1:6379:1'
    
    CCACHES = {
        'default': {
            'BACKEND': 'django_redis.cache.RedisCache',
            'LOCATION': REDIS_URL,
            'TIMEOUT': '300',
            'OPTIONS': {
                # 'PASSWORD': '对应的密码',
                'CLIENT_CLASS': 'django_redis.client.DefaultClient',
                'PARSER_CLASS': 'redis.connection.HiredisParser',
            },
            'CONNECTION_POOL_CLASS': 'redis.connection.BlockingConnectionPool',
        }
    }

     05-缓存的粒度

    5.1 整站缓存

    # 直接在settings.py的MIDDLEWARE中的第一行增加
    'django.middleware.cache.UpdateCacheMiddleware',
    # 但一般不这么用

    5.2 整个页面的缓存

    缓存url

    5.3 局部数据缓存

    函数缓存的用法,只需要增加装饰器即可。比如:Model层的Post.hot_posts的更新频率不高,那么可以进行比较长的缓存。

    from django.core.cache import cache
    
    class Post(models.Model):
        
        @classmethod
        def hot_posts(self):
            result = cache.get('hot_posts')
            if not result:
                result = cls.objects.filter(status=cls.STATUS_NORMAL).order_by('-pv')
                cache.set('hot_posts', result, 10*60)
            return result

    如果需要缓存部分的模板数据时。可以这么做,比如缓存50s。

    {% load cache %}
    {% cache 50 sidebar %}
        ...sidebar...
    {% endcache %}

    此时只需要把要缓存的内容用cache标签抱起来即可。

  • 相关阅读:
    oppo手机永久打开USB调试模式
    一个简单的php分页类代码(转载)
    php分页类的二种调用方法(转载)
    直流电与交流电的几点区别
    变压器的分类_变压器的作用
    静态无功补偿与动态无功补偿的区别(转载)
    无功补偿装置三种投切方式(转载)
    西门子plc串口通讯方式
    电动葫芦起吊重物时摇晃怎么办?
    电灯节电小知识的方法大全(转载)
  • 原文地址:https://www.cnblogs.com/pgxpython/p/10401189.html
Copyright © 2011-2022 走看看