• 【Django】缓存



    由于Django是动态网站,所以每次请求都会去数据库中进行响应的操作。
    当程序访问量大时,耗时必然会更加明显,最简单的解决方案就是使用缓存。

    Django中的缓存:
    即将某一个view的返回值保存至内存或memcache中,默认保存5分钟。在此时间内如果有人来访问此view,则不会去执行此view,而是直接从内存或memcache中获取此view的返回值,并返回.

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

    1. 开发调试
    2. 内存
    3. 文件
    4. 数据库
    5. Memcache缓存(python-memcached模块)
    6. Memcache缓存(pylibmc模块)


    配置


    开发调试:

    # 开发调试用,实际内部不做任何操作,即不会缓存
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  # 引擎,指定为开发调试
            'TIMEOUT': 300,  # 超时时间
            'OPTIONS': {
                'MAX_ENTRIES': 300,  # 缓存的最大个数(默认300)
                'CULL_FREQUENCY': 3,  # 缓存超过最大个数后,剔除缓存个数的比例, 即:1/CULL_FREQUENCY(默认3)
            },
            # 'KEY_PREFIX': '',  # 缓存key的前缀(默认空)
            # 'VERSION': 1,  # 缓存key的版本(默认1)
            # 'KEY_FUNCTION': "函数名",  # 生成key的函数(默认函数会生成为【前缀:版本:key】)
        },
    }
    

    缓存到内存:

    # 此缓存将内容保存至内存的变量中
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  # 引擎,指定为内存缓存
            'LOCATION': 'unique-snowflake',  # 唯一标识
            'TIMEOUT': 300,  # 超时时间
            'OPTIONS': {
                'MAX_ENTRIES': 300,  # 缓存的最大个数(默认300)
                'CULL_FREQUENCY': 3  # 缓存超过最大个数后,剔除缓存个数的比例, 即:1/CULL_FREQUENCY(默认3)
            }
        }
    }
    

    缓存到文件:

    # 此缓存将内容保存至文件
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',  # 引擎,指定为文件缓存
            'LOCATION': '/Users/macbook/django_cache',  # 缓存的文件夹路径(需要手动创建好文件夹)
        }
    }
    # 注:其他配置同开发调试版本
    

    缓存到数据库:

    # 此缓存将内容保存至数据库
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
            'LOCATION': 'my_cache_table',  # 指定数据表
        }
    }
    # 将以上配置写好之后,执行命令:python manage.py createcachetable, 将会自动创建数据表
    

    Memcache缓存(python-memcached模块):

    # 此缓存使用python-memcached模块连接memcache
    
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': '127.0.0.1:11211',
        }
    }
    
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': 'unix:/tmp/memcached.sock',
        }
    }
    
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': [
                '172.19.26.240:11211',
                '172.19.26.242:11211',
            ]
        }
    }
    

    Memcache缓存(pylibmc模块):

    # 此缓存使用pylibmc模块连接memcache
    
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
            'LOCATION': '127.0.0.1:11211',
        }
    }
    
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
            'LOCATION': '/tmp/memcached.sock',
        }
    }
    
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
            'LOCATION': [
                '172.19.26.240:11211',
                '172.19.26.242:11211',
            ]
        }
    }
    


    应用


    全站使用:

    使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户。在返回给用户之前,判断缓存中是否已经存在,如果不存在,则UpdateCacheMiddleware会将数据保存至缓存,从而实现全站缓存。

    MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',  # 放缓存(要写在中间件列表的头部)
    	···
    	# 其它中间件
    	···
        'django.middleware.cache.FetchFromCacheMiddleware',  # 获取缓存(要写在中间件列表的尾部)
    ]
    
    # 中间件缓存配置
    # CACHE_MIDDLEWARE_SECONDS = 5  # 超时时间(指定int类型)
    # CACHE_MIDDLEWARE_ALIAS = ''  # 别名
    # CACHE_MIDDLEWARE_KEY_PREFIX = ''  # 关键的前缀
    

    单独视图缓存:

    # 方式一:
    from django.views.decorators.cache import cache_page  # 用于缓存视图
    
    @cache_page(5)  # 指定缓存时间为5秒(默认15*60)
    def test(request):
    	pass
    
    
    # 方式二:
    from django.views.decorators.cache import cache_page  # 用于缓存视图
    
    urlpatterns = [
        url(r'^test/$', cache_page(5)(views.test)),
        # cache_page(5):指定缓存时间为5秒
        # (views.test):执行的视图函数
    ]
    

    局部模版使用:

    # 引入TemplateTag
    {% load cache %}
    
    # 使用缓存
    {% cache 超时时间(s) 缓存key %}
    	"""将要缓存的内容写在此处"""
    {% endcache %}
    

    关于Django缓存的更多知识:https://docs.djangoproject.com/en/1.11/topics/cache/

  • 相关阅读:
    Linux 远程和本地的一些解决方式
    【Android界面实现】使用PagerTabStrip实现有滑动标签的Viewpager
    Elasticsearch
    Awk使用及站点日志分析
    我的软考之路(八)——三大原则学会数据流图
    BZOJ 3864 Hero meet devil DP套DP
    Android studio 自己定义打包APK名称
    C/C++——程序的内存分配
    剑指offer 高速排序
    HDU1069(还是dp基础)
  • 原文地址:https://www.cnblogs.com/zyk01/p/10176341.html
Copyright © 2020-2023  润新知