Django-缓存
发布日期:2021-08-14 17:19:17 浏览次数:5 分类:技术文章

本文共 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

转载地址:https://blog.csdn.net/weixin_30730151/article/details/98152116 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:[无关IT]就这样在凌晨写一篇吧~
下一篇:Elasticsearch Server,2nd Edition pdf 翻译 中文

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年11月14日 12时40分20秒