最近在个人项目优化的过程中,发现自己重新踩了一下缓存配置的坑,转念一想索性在博客上留存一份资料以备日后随时反查,也给各位正在学习或使用django的朋友提个醒。

配置缓存CACHES

关于配置这块,目前百度Google差不多都清一色的是复制粘贴呢,就没有人发现有时候settings里面根本没有CACHES这个配置么?搞得很多刚学习的小伙伴找半天都不知道可以自己创建。。。没错!如果你在settings里面没发现CACHES的配置信息,是要自己创建的。

目前django支持6种类型的缓存方式:

  • 开发测试(默认)
  • 文件
  • 内存
  • 数据库
  • memcache缓存(分为python-memcache模块和pylibmc模块两种方式)
  • redis(需要额外pip install django-redis)

开发测试模式配置:

CACHES = {'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期)'OPTIONS':{'MAX_ENTRIES': 300,      # 最大缓存个数(默认300)'CULL_FREQUENCY': 3,    # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)},'KEY_PREFIX': '',   # 缓存key的前缀(默认空)'VERSION': 1,         # 缓存key的版本(默认1)'KEY_FUNCTION' 函数名  # 生成key的函数(默认生成 前缀:版本:key)}}

内存模式:

注意:其实不同模式要更改的只是引擎,其他设置如“TIMEOUT”、“OPTION”等都是通用的!!所以下面只给出变更的部分!!

'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache','LOCATION': 'unique-snowflake',}

文件模式:

CACHES = {'default': {'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache','LOCATION': '/var/tmp/django_cache',#这里给出的是路径,但是更多时候是在项目根目录创建个文件夹,然后直接os.path.join(BASE_DIR,‘文件夹名称’)}}

数据库:

CACHES = {'default': {'BACKEND': 'django.core.cache.backends.db.DatabaseCache','LOCATION': 'my_cache_table', # 要先创建个数据库表才能指定路径}}

Memcache缓存:

python-memcache模块:

CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': ['172.19.26.240:11211','172.19.26.242:11211',#可以添加多个地址,也可以只添加一个]}}

或:

 CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': 'unix:/tmp/memcached.sock',}}   

pylibmc模块:

用法和上面一样,只是引擎换了:

 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',

redis缓存:

pip install django-redis
CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient","CONNECTION_POOL_KWARGS": {"max_connections": 100}}}
}

使用方法:因为redis不是django内置支持的,所以使用方法略不同:
在views.py中:

from django_redis import get_redis_connection
conn = get_redis_connection("default")

使用缓存:

一、全局使用(利用中间件):
由于中间件有固定的顺序执行,所以我们始终在获得最终的请求或返回处设置缓存。

MIDDLEWARE = ['django.middleware.cache.UpdateCacheMiddleware',#在返回的response中加入到缓存# 其他中间件...'django.middleware.cache.FetchFromCacheMiddleware',#在接收到的request请求中加入到缓存]CACHE_MIDDLEWARE_ALIAS = ""CACHE_MIDDLEWARE_SECONDS = ""CACHE_MIDDLEWARE_KEY_PREFIX = ""

二、单独在views中使用:

from django.views.decorators.cache import cache_page@cache_page(100)  #100表示的是缓存失效时间def index(request):

三、在局部模板中使用:
你也可以直接在自己的前端页面中插入:

{% load cache %}
#要在页码顶部先引入{% cache 100 k1 %}  #100是失效时间,k1是缓存的key缓存内容{% endcache %}

PS:
你当然可以直接在urls.py里设置缓存,但是这会让url对应视图的代码显得臃肿,个人不太建议这样做:

from django.views.decorators.cache import cache_pageurlpatterns = [url(r'^foo/([0-9]{1,2})/$', cache_page(100)(my_view)),]

django 缓存cache配置注意事项相关推荐

  1. Django 缓存 Cache

    文章目录 一.缓存 二.Django 缓存应用场景 三.Django 缓存的五种配置 0.通用配置(以redis为例) 1.开发调试 2.将缓存信息保存至文件 3.将缓存信息保存至内存 4.将缓存信息 ...

  2. Django缓存设置

    由于Django构建得是动态网站,每次客户端请求都要严重依赖数据库,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...

  3. Django中的缓存的配置与使用

    一.使用装饰器 在文件开头导入下面代码,然后在函数上方添加缓存的装饰器 from django.views.decorators.cache import cache_page @cache_page ...

  4. php smarty安装,php smarty 安装 、配置、使用 及缓存cache的配置使用

    cache 使用: cache配置: $smarty->cache_dir = "/caches/";  //缓存目录 $smarty->caching = true; ...

  5. Django 缓存6.2

    缓存 对于中等流量的网站来说,尽可能地减少开销是必要的.缓存数据就是为了保存那些需要很多计算资源的结果,这样的话就不必在下次重复消耗计算资源 Django自带了一个健壮的缓存系统来保存动态页面,避免对 ...

  6. Django缓存机制

    Django缓存机制三个粒度:1 全站缓存 settings.py 全局配置文件用中间件:MIDDLEWARE = [# 'django.middleware.cache.UpdateCacheMid ...

  7. Django缓存和信号

    Django进阶之缓存和信号 一.缓存 简介 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个view ...

  8. Django缓存和内置信号

    缓存 简单概括就是将对数据库操作查询所得到的数据放入另外一台机器上(缓存)中,当用户再次请求时,直接去缓存中拿,避免对数据库的频繁操作,加快数据的显示时间,需要知道的是,缓存里面的数据一般都设置有超时 ...

  9. pythonのdjango 缓存

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...

最新文章

  1. 解决MyBatis中 Could not set property ~ o f ~异常
  2. 机器学习中的最优化算法总结
  3. Oracle发布多语种虚拟机平台GraalVM 1.0
  4. HttpWebRequest在GetResponse时总是超时
  5. linux shell 求绝对值
  6. 判断RDD有多少个分区
  7. 运用Links方法安装插件
  8. fx5u模拟量如何读取_最全三菱FX5U系列PLC视频
  9. 基金境外设立子公司将迎新规 监管给出24个月过渡期
  10. 兴业银行研发中心笔试题_2019兴业银行笔试真题汇编(一)_考生回忆版
  11. Python练习题答案: 第一步,成为百万富翁 - 汇率卡塔【难度:2级】--景越Python编程实例训练营,1000道上机题等你来挑战
  12. 去哪找计算机相关论文,计算机行业论文在哪发表有影响力
  13. java file seek_Java RandomAccessFile seek()方法
  14. 有关苹果手机下载应用后提示不受信任的企业开发者解决方案:
  15. 奔驰c260语言设置方法图解,奔驰C260L灯光使用方法,C260L灯光开关图解说明
  16. java游戏仙剑外传李逍遥背_经典RPG游戏《仙剑奇侠传》李逍遥后期还在哪些版本中出现过?...
  17. android bmob获取密码,Bmob后端云初体验
  18. FreeRTOSMini
  19. C语言应用笔记(一):运算符优先级和使用问题
  20. 交通事故预测——《RiskOracle: A Minute-level Citywide Traffic Accident Forecasting Framework》

热门文章

  1. Scrapy项目 - 数据简析 - 实现斗鱼直播网站信息爬取的爬虫设计
  2. RK3568平台开发系列讲解(音视频篇)如何把音视频流进行网络传输?
  3. 6月19,观世音菩萨成道
  4. 有意思的一些免费API接口整理,包含官网地址以及简介
  5. 堆栈~堆栈~是堆还是栈?
  6. sqlserver java驱动_sqlserver jdbc驱动
  7. 奈学教育大数据架构分享下载
  8. vue渐进式框架的理解
  9. Matplotlib--palette调色板
  10. win10如何更改计算机用户名,手把手教你win10下怎么修改账户用户名