博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django缓存
阅读量:4678 次
发布时间:2019-06-09

本文共 9034 字,大约阅读时间需要 30 分钟。

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回。

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

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

1、配置

a、开发调试

# 此为开始调试用,实际内部不做任何操作    # 配置:        CACHES = {            'default': {                'BACKEND': 'django.core.cache.backends.dummy.DummyCache',     # 引擎                'TIMEOUT': 300,                                               # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)                'OPTIONS':{                    'MAX_ENTRIES': 300,                                       # 最大缓存个数(默认300)                    'CULL_FREQUENCY': 3,                                      # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)                },                'KEY_PREFIX': '',                                             # 缓存key的前缀(默认空)                'VERSION': 1,                                                 # 缓存key的版本(默认1)                'KEY_FUNCTION' 函数名                                          # 生成key的函数(默认函数会生成为:【前缀:版本:key】)            }        }    # 自定义key    def default_key_func(key, key_prefix, version):        """        Default function to generate keys.        Constructs the key used by all other methods. By default it prepends        the `key_prefix'. KEY_FUNCTION can be used to specify an alternate        function with custom key making behavior.        """        return '%s:%s:%s' % (key_prefix, version, key)    def get_key_func(key_func):        """        Function to decide which key function to use.        Defaults to ``default_key_func``.        """        if key_func is not None:            if callable(key_func):                return key_func            else:                return import_string(key_func)        return default_key_func
# 此为开始调试用,实际内部不做任何操作    # 配置:        CACHES = {            'default': {                'BACKEND': 'django.core.cache.backends.dummy.DummyCache',     # 引擎                'TIMEOUT': 300,                                               # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)                'OPTIONS':{                    'MAX_ENTRIES': 300,                                       # 最大缓存个数(默认300)                    'CULL_FREQUENCY': 3,                                      # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)                },                'KEY_PREFIX': '',                                             # 缓存key的前缀(默认空)                'VERSION': 1,                                                 # 缓存key的版本(默认1)                'KEY_FUNCTION' 函数名                                          # 生成key的函数(默认函数会生成为:【前缀:版本:key】)            }        }    # 自定义key    def default_key_func(key, key_prefix, version):        """        Default function to generate keys.        Constructs the key used by all other methods. By default it prepends        the `key_prefix'. KEY_FUNCTION can be used to specify an alternate        function with custom key making behavior.        """        return '%s:%s:%s' % (key_prefix, version, key)    def get_key_func(key_func):        """        Function to decide which key function to use.        Defaults to ``default_key_func``.        """        if key_func is not None:            if callable(key_func):                return key_func            else:                return import_string(key_func)        return default_key_func

b、内存

# 此缓存将内容保存至内存的变量中    # 配置:        CACHES = {            'default': {                'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',                'LOCATION': 'unique-snowflake',            }        }    # 注:其他配置同开发调试版本
# 此缓存将内容保存至内存的变量中    # 配置:        CACHES = {            'default': {                'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',                'LOCATION': 'unique-snowflake',            }        }    # 注:其他配置同开发调试版本

c、文件

# 此缓存将内容保存至文件    # 配置:        CACHES = {            'default': {                'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',                'LOCATION': '/var/tmp/django_cache',            }        }    # 注:其他配置同开发调试版本
# 此缓存将内容保存至文件    # 配置:        CACHES = {            'default': {                'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',                'LOCATION': '/var/tmp/django_cache',            }        }    # 注:其他配置同开发调试版本

d、数据库

# 此缓存将内容保存至数据库    # 配置:        CACHES = {            'default': {                'BACKEND': 'django.core.cache.backends.db.DatabaseCache',                'LOCATION': 'my_cache_table', # 数据库表            }        }    # 注:执行创建表命令 python manage.py createcachetable
# 此缓存将内容保存至数据库    # 配置:        CACHES = {            'default': {                'BACKEND': 'django.core.cache.backends.db.DatabaseCache',                'LOCATION': 'my_cache_table', # 数据库表            }        }    # 注:执行创建表命令 python manage.py createcachetable

e、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',            ]        }    }
# 此缓存使用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',            ]        }    }

f、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',            ]        }    }
# 此缓存使用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',            ]        }    }

2、应用

a. 全站使用

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

b. 单独视图缓存

方式一:        from django.views.decorators.cache import cache_page        @cache_page(60 * 15)        def my_view(request):            ...    方式二:        from django.views.decorators.cache import cache_page        urlpatterns = [            url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),        ]
方式一:        from django.views.decorators.cache import cache_page        @cache_page(60 * 15)        def my_view(request):            ...    方式二:        from django.views.decorators.cache import cache_page        urlpatterns = [            url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),        ]

c、局部视图使用

a. 引入TemplateTag        {
% load cache %} b. 使用缓存 {
% cache 5000 缓存key %} 缓存内容 {
% endcache %}

 

更多:https://docs.djangoproject.com/en/1.9/topics/cache/

转载于:https://www.cnblogs.com/lidian/p/8717864.html

你可能感兴趣的文章
vue学习链接
查看>>
Systemd 初始化进程
查看>>
【C#学习笔记】文本复制到粘贴板
查看>>
Windows store 验证你的 URL http:// 和 https:// ms-appx:/// ms-appdata:///local
查看>>
python全栈开发_day7_字符编码,以及文件的基本读取
查看>>
js 验证码 倒计时60秒
查看>>
C#基础
查看>>
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 15. 用户管理
查看>>
杭电3466————DP之01背包(对状态转移方程的更新理解)
查看>>
算法分析常用记号
查看>>
spring mvc 返回类型
查看>>
[js高手之路] html5 canvas动画教程 - 匀速运动
查看>>
11.VS2015常用快捷键大全
查看>>
js学习总结----less常用的方法
查看>>
需求分析问卷调查及反馈结果
查看>>
当深度学习遇见自动文本摘要
查看>>
心随手动,驱动短视频热潮的引擎
查看>>
Servlet深入之初始化
查看>>
python中出现IndentationError:unindent does not match any outer indentation level错误
查看>>
<mvc:annotation-driven />与<context:annotation-config/>
查看>>