Django 缓存框架浅析 +
内存分析
动态网站存在一个基本权衡是——它们是动态的。每次用户请求一个页面,web 服务器需要提供各种各样的计算——从数据库查询到模板渲染再到业务逻辑——最后生成页面呈现给用户。从处理开销的角度来看,这比读取文件的开销要高得多。
缓存是将一些需要经过大量计算的结果存储在一个指定区域中,避免再次访问时的重复计算(处理好缓存的失效时机,否则会破坏数据的实时性)。通俗的讲,缓存就是用空间换取时间的一种策略方案。
使用缓存(这里主要指后端缓存)有以下主要优势:
提升接口响应速度
最近用django+apache+mod_python搭建的一在线元器件交易平台网站([url]http://www.ecgoo.net/[/url]),由于网络爬虫的频繁光顾,导致经常有httpd进程狂吃内存,网站无法访问。
google了一下,发现有篇英文文档很有帮助,因此翻译了下,希望对他人有帮助
原文:[url]http://blog.webfaction.com/tips-t...
一、python有自动垃圾回收机制(当对象的引用计数为零时解释器会自动释放内存),出现内存泄露的场景一般是扩展库内存泄露或者循环引用(还有一种是全局容器里的对象没有删除)
前者无需讨论,后者举例如下(Obj('B')和Obj('C')的内存没有回收)(貌似循环引用的内存,Python解释器也会自己回收(标记-清除垃圾收集机制),只是时间早晚的问题,也就是说我们在编码中不需要耗费精力去刻意避免
在django下使用celery作为异步任务系统,十分方便。
同时celery也提供定时任务机制,celery beat。使用celery beat 可以为我们提供 cron,schedule 形式的定时任务。
在django下使用celery beat的过程中,发现了 celery beat进程 占用内存非常大,而且一直不释放。
怀疑其有内存占用不释放的可能。
因为之前使用dja
CACHES = {
'default': {
'BACKEND': '
django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
```
python
CACHES = {
'default': {
'BACKEND': '
django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/',
'OPTIONS': {
'CLIENT_CLASS': '
django_redis.client.DefaultClient',
3. 在 views.py 文件中,使用缓存装饰器来缓存数据:
```
python
from
django.core.cache import cache
@cache.page('my_key', 60*60*24) # 保存一天
def my_view(request):
# 加载数据的代码
4. 在模板中使用 cache 标签缓存模板:
```
django
{% load cache %}
{% cache 60*60*24 "my_template" %}
<!-- 模板代码 -->
{% endcache %}
这样,用户在访问页面时,数据只会被加载
一次,并且在缓存过期前都会被保存在缓存中。
docker拉取镜像报错 error pulling image configuration: download failed after attempts=6: dial tc