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

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

作者: 

出处:

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

 

 

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

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

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

一、配置

1. 开发调试

1 # 此为开始调试用,实际内部不做任何操作 2     # 配置: 3         CACHES = { 4             'default': { 5                 'BACKEND': 'django.core.cache.backends.dummy.DummyCache',     # 引擎 6                 'TIMEOUT': 300,                                               # 缓存超时时间(默认300,None表示永不过期,0表示立即过期) 7                 'OPTIONS':{ 8                     'MAX_ENTRIES': 300,                                       # 最大缓存个数(默认300) 9                     'CULL_FREQUENCY': 3,                                      # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)10                 },11                 'KEY_PREFIX': '',                                             # 缓存key的前缀(默认空)12                 'VERSION': 1,                                                 # 缓存key的版本(默认1)13                 'KEY_FUNCTION' 函数名                                          # 生成key的函数(默认函数会生成为:【前缀:版本:key】)14             }15         }16 17 18     # 自定义key19     def default_key_func(key, key_prefix, version):20         """21         Default function to generate keys.22 23         Constructs the key used by all other methods. By default it prepends24         the `key_prefix'. KEY_FUNCTION can be used to specify an alternate25         function with custom key making behavior.26         """27         return '%s:%s:%s' % (key_prefix, version, key)28 29     def get_key_func(key_func):30         """31         Function to decide which key function to use.32 33         Defaults to ``default_key_func``.34         """35         if key_func is not None:36             if callable(key_func):37                 return key_func38             else:39                 return import_string(key_func)40         return default_key_func
View Code

2. 内存

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

3. 文件

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

4. 数据库

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

5. Memcache缓存(python-memcached模块)

1 # 此缓存使用python-memcached模块连接memcache 2  3     CACHES = { 4         'default': { 5             'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 6             'LOCATION': '127.0.0.1:11211', 7         } 8     } 9 10     CACHES = {11         'default': {12             'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',13             'LOCATION': 'unix:/tmp/memcached.sock',14         }15     }   16 17     CACHES = {18         'default': {19             'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',20             'LOCATION': [21                 '172.19.26.240:11211',22                 '172.19.26.242:11211',23             ]24         }25     }

6. Memcache缓存(pylibmc模块)

1 # 此缓存使用pylibmc模块连接memcache 2      3     CACHES = { 4         'default': { 5             'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 6             'LOCATION': '127.0.0.1:11211', 7         } 8     } 9 10     CACHES = {11         'default': {12             'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',13             'LOCATION': '/tmp/memcached.sock',14         }15     }   16 17     CACHES = {18         'default': {19             'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',20             'LOCATION': [21                 '172.19.26.240:11211',22                 '172.19.26.242:11211',23             ]24         }25     }

二、应用

1. 全站使用

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

2. 单独视图缓存

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

3. 局部视图使用

1 a. 引入TemplateTag2 3         {% load cache %}4 5     b. 使用缓存6 7         {% cache 5000 缓存key %}8             缓存内容9         {% endcache %}

 

官方文档:

转载于:https://www.cnblogs.com/OldJack/p/7486491.html

你可能感兴趣的文章
android 抽屉式滑动demo
查看>>
Swift语言Storyboard教程:第一部分
查看>>
unload事件Ajax提交问题
查看>>
代码工程flex不显示GIF图片问题
查看>>
Kotlin 初窥门径[2]:流程控制
查看>>
Android利用Socket与硬件通信之智能家居APP
查看>>
Idea中提交SVN或git时,忽略某些文件不提交
查看>>
20135236、20135206第一次试验报告
查看>>
Java的“Goto”与标签
查看>>
python 爬虫
查看>>
C# 支持两种形式的字符串:规则字符串和逐字字符串
查看>>
css z-index
查看>>
Javascript网页刷新方法集锦
查看>>
SQL触发器
查看>>
阿里云CentOS环境下tomcat启动超级慢的解决方案
查看>>
c/c++中的&、|和&&、||
查看>>
普通disco
查看>>
tmux快捷键及命令汇总
查看>>
NET Core微服务之路:弹性和瞬态故障处理库Polly的介绍
查看>>
Android学习笔记进阶15之Shader渲染
查看>>