我需要使用memcached和基于文件的缓存.我在设置中设置了缓存:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': 'c:/foo/bar',
},
'inmem': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
}
}
Run Code Online (Sandbox Code Playgroud)
假的是暂时的.文件说:
cache.set('my_key', 'hello, world!', 30)
cache.get('my_key')
Run Code Online (Sandbox Code Playgroud)
好的,但是我现在如何设置和获取仅用于'inmem'缓存后端的缓存(在将来的memcached中)?文档没有提到如何做到这一点.
我注意到随机一些页面需要 2 到 12 秒才能加载,我安装了调试工具栏,我知道我的查询都很有效(即没有重复),工具栏显示它们都以毫秒为单位运行。
我决定关注的一个特定页面是我的搜索页面,它使用 haystack 和弹性搜索。
我有一个查询 haystack 的函数,我有一个计时器,它在服务器端函数的开头和结尾运行,然后生成查询时间,从 0.01 到 0.2 秒不等,无论哪种方式都非常快(下面的视图示例) )。但是页面可能需要很长时间才能随机加载。
我向 DJDT 添加了模板计时面板,但它不支持 Django 2.x,但它仍然显示计时结果,从 2000 毫秒到 10000 毫秒不等
这让我研究了我在这篇文章中遇到的模板渲染(django:加快模板渲染性能的指南)。虽然我对上面提到的很多事情都不熟悉,但我确实研究了缓存。我已将以下内容添加到我的 settings.py 文件中:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-gugu-cache',
}
}
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
BASE_DIR + '/templates/',
],
'APP_DIRS': False,
'OPTIONS': {
'debug' : DEBUG,
'context_processors': [
'django.template.context_processors.debug',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.request',
'django.template.context_processors.i18n',
'itapp.context_processors.site_links',
'itapp.context_processors.quick_jump_links',
],
'loaders': [
('django.template.loaders.cached.Loader', [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
]),
], …Run Code Online (Sandbox Code Playgroud) 我在一个Django应用程序下有许多站点,我想实现站点范围的缓存.然而事实证明这是一个真正的麻烦.
发生的事情是settings.CACHE_MIDDLEWARE_KEY_PREFIX在启动时设置一次,我无法继续并根据当前站点的内容进行更改.因此,如果http://website1.com/abc/缓存了一个url页面,则http://website2.com/abc/呈现缓存版本http://website1.com/abc/.这两个网站都在同一个Django实例上运行,因为Django Sites似乎允许我们这样做.
这是一种不正确的方法吗?因为我无法CACHE_MIDDLEWARE_KEY_PREFIX在运行时动态设置,所以无法使用Django的站点范围缓存来缓存多个站点.我也无法为模板和视图缓存执行此操作.
我得到的印象是,真正需要设置的方式是每个站点都需要自己的Django实例,除了设置文件之外几乎完全相同,在我的情况下,设置文件只有不同的值CACHE_MIDDLEWARE_KEY_PREFIX.这些Django实例都读写同一个数据库.这让我很担心,因为它可能会产生一些新问题.
我是走在正确的轨道上还是我错误地认为多站点架构需要如何工作?我检查了Django文档,并没有真正提到如何处理为多个站点提供服务的Django应用程序的缓存(不是低级缓存).
问题出在这里:我有博客应用程序,并且将帖子输出视图缓存了5分钟。
@cache_page(60 * 5)
def article(request, slug):
...
Run Code Online (Sandbox Code Playgroud)
但是,无论何时将新评论添加到帖子中,我都想使缓存无效。我想知道如何做到最好?
我已经看到了这个相关的问题,但是它已经过时了。
我有一系列遵循这种模式的缓存:
key_x_y = value
Run Code Online (Sandbox Code Playgroud)
喜欢:
'key_1_3' = 'foo'
'key_2_5' = 'bar'
'key_1_7' = 'baz'
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何迭代所有键以匹配模式,key_1_*以获得foo和baz使用本机django cache.get()?
(我知道有办法,特别是redis,允许使用更广泛的api iterate,但我想坚持使用vanilla django缓存,如果可能的话)
我已经按照Stack overflow Link中提供的解决方案进行了操作,当我在浏览器中使用它时它工作正常.但是,当我尝试用curl点击该URL时,它不会为浏览器缓存..
让我解释.
如果我
example.org/results?limit=7从我的Chrome中点击了一个url ,则需要8-10 seconds加载并且连续点击需要花费时间milliseconds
所以我所做的是URL用curl命令调用它; 但它没有使用缓存数据并再次创建缓存.
所以我发现问题在于arg下面代码中的参数,因为它包含WSGIRequest在缓存密钥中使用的对象中的浏览器头,因为它包含我不需要缓存的头文件.这无法实现curl请求自动创建缓存的目的celery task.
@method_decorator(cache_page(60 * 60 * 24))
def dispatch(self, *arg, **kwargs):
print(arg)
print(kwargs)
return super(ProfileLikeHistoryApi, self).dispatch(*arg, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我能做的是只传递kwargs创建缓存或任何其他替代方案,我可以通过它来缓存网址而不是标题
我在这里先向您的帮助表示感谢.
django curl django-cache django-caching django-rest-framework
在我的Django项目中,应用程序my_app有一个引用javascript静态文件的模板:
<script src="{% static 'my_app/my_script.js' %}"></script>
Run Code Online (Sandbox Code Playgroud)
一旦我在my_app/templates/my_app中安装my_script.js,一切似乎都有效.在某些时候,我用不同的脚本覆盖my_script.js,这样my_script.js现在有不同的内容.
但是,当我使用浏览器加载my_app时,它会加载旧的my_script.js,尽管它不再存在.我该如何解决?谢谢.
我尝试使用 Django Cache 来改善我的观点。效果很好,400 毫秒到 8 毫秒是完美的。但是当用户第一次访问页面时,Django 会在标题中缓存包含用户信息的页面,当我尝试注销时,页面会继续包含用户信息。
我也尝试在模板中使用缓存,但效果不好,我的问题来自视图,所以继续 400ms。
我的设置.py
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
}
}
Run Code Online (Sandbox Code Playgroud)
我的看法.py
@cache_page(60 * 15)
def list(request, tag_slug=None):
page = request.GET.get('page')
data = questions_controller.list_questions(request, tag_slug, None, page)
if data:
return render(request, 'questions/list.html', data)
return page_not_found(request, "Page not found")
Run Code Online (Sandbox Code Playgroud) 我似乎找不到任何关于如何执行此操作的教程。
所以,我基本上想向我的 Django 项目添加缓存。我创建了一个博客视图,仅当模型自上次缓存以来发生更改时才应该缓存和更新。
我该怎么做呢?
在我的网站中,我想在多个页面的侧边栏中向用户展示查看次数最多的产品类别。
所以在每个不同的观点中,我都有:
variables = RequestContext(request, {
(...)
'most_viewed_cats': calculate_most_viewed_categories()
}
Run Code Online (Sandbox Code Playgroud)
并在各种模板中
{% include "list_most_viewed_categories" %}
Run Code Online (Sandbox Code Playgroud)
在那一个:
<ul>
{% for cat in most_viewed_cats %}
{{ cat.name }}
{% empty %}
</ul>No categories to show.<ul>
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
但是,我只想每 2 天左右计算一次 most_viewed_categories 值,而不是在每个视图中计算它。
我知道可以缓存视图,但这更像是一种变量缓存。是否可以将这个变量缓存在 Django 服务器的某个地方,并仅在这段时间之后更新它?怎么做呢?
谢谢
我正在尝试在Django中设置缓存,但它不会让我定义默认缓存.我并不过分担心我使用什么类型的缓存(我已经尝试过Filesystem和Database Cache.)
但即使复制+粘贴他们的示例代码,错误检查器也会告诉我:
?: (caches.E001) You must define a 'default' cache in your CACHES setting.
Run Code Online (Sandbox Code Playgroud)
我还尝试将CACHES设置放在settings.py文件的底部,以确保初始化CACHES设置可能依赖的任何内容.
我的代码如下:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
}
}
Run Code Online (Sandbox Code Playgroud)
完整的错误消息是:
Unhandled exception in thread started by <function check_errors.
<locals>.wrapper at 0x0436A300>
Traceback (most recent call last):
File "C:\Users\Kasper\Documents\kasperfred-blog\kasperfred-blog\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "C:\Users\Kasper\Documents\kasperfred-blog\kasperfred-blog\lib\site-packages\django\core\management\commands\runserver.py", line 116, in inner_run
self.check(display_num_errors=True)
File "C:\Users\Kasper\Documents\kasperfred-blog\kasperfred-blog\lib\site-packages\django\core\management\base.py", line 472, in check
raise SystemCheckError(msg)
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:
ERRORS:
?: …Run Code Online (Sandbox Code Playgroud) django ×11
django-caching ×11
django-cache ×6
python ×3
caching ×2
curl ×1
django-sites ×1
javascript ×1