标签: django-cache

Django数据库缓存

我正在开发一个小项目,我想为最终用户提供多个缓存选项.我认为使用Django交换memcached进行数据库或基于文件的缓存非常简单.我的memcached实现就像一个没有任何问题的冠军.我在我的页面上放置了时间戳,并且卷曲始终在我希望缓存正常工作的位置显示较旧的时间戳.但是,当我切换到数据库缓存时,我没有在数据库中获得任何条目,并且公然缓存不起作用.

从我在文档中看到的所有应该是必要的是改变后端:

CACHE_BACKEND = 'memcached://localhost:11211'
Run Code Online (Sandbox Code Playgroud)

至:

CACHE_BACKEND = 'db://cache_table'
Run Code Online (Sandbox Code Playgroud)

在运行所需的manage.py(createcachetable)行之后,该表存在,我可以很好地查看它.我目前正在测试,所以我使用sqlite3,但就我所知,这应该不重要.我可以确认该表是完全空的,并且在任何时候都没有写入.另外,正如我之前所说,我的时间戳也是"错误的",这给了我更多的证据证明某些事情并不完全正确.

有什么想法吗?我正在使用sqlite3,Django 1.0.2,python 2.6,目前在Ubuntu Jaunty机器上通过Apache提供服务.我敢肯定我只是简单地谈论一些事情.感谢您提供的任何帮助.

python django django-cache

4
推荐指数
1
解决办法
2772
查看次数

如何在视图中使用Django缓存而不缓存所有页面

我尝试使用 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)

python django caching django-cache django-caching

4
推荐指数
1
解决办法
3639
查看次数

如何使 Django 数据库缓存的条目过期?

我有一个带有注册数据库缓存的 Django 应用程序:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'exchange_rate_cache',
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望缓存中的条目在一周后过期并被删除。要从缓存中删除条目,只需执行以下操作:

from django.core.cache import cache
cache.delete(key)
Run Code Online (Sandbox Code Playgroud)

但是,只有当条目在缓存中存储超过 1 周时,我才必须执行此操作。

如何才能做到这一点?谢谢你。

python django django-cache

4
推荐指数
1
解决办法
3450
查看次数

如何在Django中显式重置模板片段缓存?

我正在为我的Django应用程序使用Memcache.

在Django中,开发人员可以使用模板片段缓存来仅缓存模板的一部分.https://docs.djangoproject.com/en/dev/topics/cache/#template-fragment-caching

我想知道是否有一种方法可以在views.py中明确更改模板片段缓存部分的值.例如,除了模板片段缓存之外,可以使用类似于cache.set("sidebar","new value")的方法吗?

谢谢您的帮助.

django django-templates django-cache python-memcached

3
推荐指数
1
解决办法
1378
查看次数

Django 内存模型,不用于测试

我有一个模型,其实例永远不需要写入数据库。它们是动态生成的,成本非常低,而且几乎永远不会改变。

我希望通过 ORM 查询这些实例,并在 django-admin 中浏览它们(只读+mass_actions,不需要 CRUD)。

据我所知,SQLite 在运行测试时使用内存数据库。我想我想使用这个功能,但不仅仅限于测试。

另一种选择可能是纯内存模型后端,但我没有找到。实际上我确实找到了这个项目: https: //github.com/felipecruz/dmqs但它看起来有点过时了。

或者也许有一个缓存后端可以做到这一点?

django django-models django-orm django-cache

3
推荐指数
1
解决办法
1334
查看次数

Django Redis 缓存值

我已使用 python 脚本将值设置为外部 Redis 服务器。

r = redis.StrictRedis(host='localhost', port=6379, db=1)
r.set('foo', 'bar')
Run Code Online (Sandbox Code Playgroud)

并尝试使用views.py中的django缓存从Web请求中获取值。

from django.core.cache import cache
val = cache.get("foo")
Run Code Online (Sandbox Code Playgroud)

它返回 None。但当我试图让它成形时

from django_redis import get_redis_connection
con = get_redis_connection("default")
val = con.get("foo")
Run Code Online (Sandbox Code Playgroud)

它返回正确的值“bar”。缓存和直接连接如何工作?

django django-cache redis

3
推荐指数
1
解决办法
3417
查看次数

Django 缓存 - 模型更改时更新

我似乎找不到任何关于如何执行此操作的教程。

所以,我基本上想向我的 Django 项目添加缓存。我创建了一个博客视图,仅当模型自上次缓存以来发生更改时才应该缓存和更新。

我该怎么做呢?

django django-cache django-caching

3
推荐指数
1
解决办法
4268
查看次数

Django 中的缓存和 django-channels 通道层可以使用相同的 Redis 存储吗?

我有一个 Django 3.1 应用程序,它使用 Redis 作为其缓存后备存储 (django-redis)。我希望使用 django-channels,它能够使用 Redis 作为通道层

同时为缓存和 django-channels 通道层使用相同的 Redis 存储是否安全?换句话说,我希望在我的 settings.py 中包含以下内容,并且我想知道这是否可以。

import environ

env = environ.Env()

REDIS_HOST = env('REDIS_HOST', default='127.0.0.1')
REDIS_PORT = env('REDIS_PORT', default='6379')

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        "LOCATION": "redis://" + REDIS_HOST + ":" + REDIS_PORT + "/0",
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
            'CONNECTION_POOL_KWARGS': {'max_connections': 30},
            'IGNORE_EXCEPTIONS': True,
        }
    }
}

CHANNEL_LAYERS = {
    "default": {
        'BACKEND': 'channels_redis.core.RedisChannelLayer',
        "CONFIG": {
            "hosts": [(REDIS_HOST, int(REDIS_PORT))],
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

django django-cache django-redis django-channels

3
推荐指数
1
解决办法
1096
查看次数

Django MemcacheUnexpectedCloseError 和 [WinError 10061] 由于目标机器主动拒绝而无法建立连接

您好,我是 django 的新手,尝试使用 django-cache 来加速页面加载,该页面将列出 100 家公司及其每页的详细信息,但我不断遇到错误。当我使用 django 文档 127.0.0.1:11211 中的 IP 和端口时,出现此错误:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/

Django Version: 3.2.4
Python Version: 3.9.1
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'debug_toolbar',
 'mailer')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware')



Traceback (most recent call last):
  File "C:\Users\Rafin\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\Rafin\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Rafin\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\decorators.py", line 122, in _wrapped_view
    result = middleware.process_request(request)
  File …
Run Code Online (Sandbox Code Playgroud)

django django-cache python-3.x

3
推荐指数
1
解决办法
1602
查看次数

用另一个装饰器包裹 python 装饰器

我的 Django 代码库中有一个常见的装饰器调用:

@override_settings(
    CACHES={
        **settings.CACHES,
        "default": generate_cache("default", dummy=False),
        "throttling": generate_cache("throttling", dummy=False),
    }
)
def test_something():
    ...
Run Code Online (Sandbox Code Playgroud)

装饰器代码太冗长。我很乐意将此代码包装到一个名为 的新装饰器中@use_real_cache,以便测试函数看起来更清晰:

@use_real_cache
def test_something():
    ...
Run Code Online (Sandbox Code Playgroud)

如何用另一个装饰器包装一个装饰器?

python django django-cache django-tests

3
推荐指数
1
解决办法
259
查看次数