我正在开发一个小项目,我想为最终用户提供多个缓存选项.我认为使用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提供服务.我敢肯定我只是简单地谈论一些事情.感谢您提供的任何帮助.
我尝试使用 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 应用程序:
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 周时,我才必须执行此操作。
如何才能做到这一点?谢谢你。
我正在为我的Django应用程序使用Memcache.
在Django中,开发人员可以使用模板片段缓存来仅缓存模板的一部分.https://docs.djangoproject.com/en/dev/topics/cache/#template-fragment-caching
我想知道是否有一种方法可以在views.py中明确更改模板片段缓存部分的值.例如,除了模板片段缓存之外,可以使用类似于cache.set("sidebar","new value")的方法吗?
谢谢您的帮助.
我有一个模型,其实例永远不需要写入数据库。它们是动态生成的,成本非常低,而且几乎永远不会改变。
我希望通过 ORM 查询这些实例,并在 django-admin 中浏览它们(只读+mass_actions,不需要 CRUD)。
据我所知,SQLite 在运行测试时使用内存数据库。我想我想使用这个功能,但不仅仅限于测试。
另一种选择可能是纯内存模型后端,但我没有找到。实际上我确实找到了这个项目: https: //github.com/felipecruz/dmqs但它看起来有点过时了。
或者也许有一个缓存后端可以做到这一点?
我已使用 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 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 来加速页面加载,该页面将列出 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 代码库中有一个常见的装饰器调用:
@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)
如何用另一个装饰器包装一个装饰器?
django ×10
django-cache ×10
python ×4
caching ×1
django-orm ×1
django-redis ×1
django-tests ×1
python-3.x ×1
redis ×1