将 memcached 用作 Django cached_db 会话设置的缓存后端时控制其超时
Controlling time-out of memcached when using it as a cache backend for Django's cached_db session setting
在 Django 项目中使用 cached_db
类型会话缓存时:
1) 如何控制缓存后端的time-out
?例如,我希望保存在 memcached 中的每个会话数据对象的 ttl
为 20 天。此外,我希望此 ttl
在后续写入时更新(如果发生)。
2) 如果会话写入大量涌入,memcached 是否会自动扩展以消耗所有可用的 RAM?我可以指定内存分配吗?此外,如果数据激增,是否有任何最佳实践?当我看到 /etc/memcached.conf
时,似乎没有太多可以拉动的杠杆。
3) 成功将 ttl 添加到缓存的会话对象后,如何测试它是否实际工作?
如果能得到一个说明性的答案就太好了。
背景: 我一直依赖基于数据库的会话缓存,现在才考虑转向 cached_db
。因此,我对这个问题还不太了解。
我目前的缓存设置如下(设置在settings.py
):
CACHES = {
'default': {
'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION':'unix:/var/run/memcached/memcached.sock',
}
}
后端接受一个TIMEOUT
setting. You can also specify a different timeout when setting a particular cache entry。
Memcached 不会自动扩展。它在启动时接受一个 -m
command line argument 来定义它应该用于缓存的最大内存量。这默认为 64MB。您也可以在操作期间使用命令 cache_memlimit <limit in MB>
更改此限制。我不能说最佳实践是什么 - 认为这是确定你得到什么样的负载以及你是否需要更多内存以避免由于缺少 space.
[ 而导致缓存逐出的情况。 =26=]
像这样:
from django.core.cache import cache
cache.set('test_key', 'test_value', timeout=10) # Short timeout of 10 seconds
# 10 seconds later
cache.get('test_key') # Should return None because the entry has expired
在 Django 项目中使用 cached_db
类型会话缓存时:
1) 如何控制缓存后端的time-out
?例如,我希望保存在 memcached 中的每个会话数据对象的 ttl
为 20 天。此外,我希望此 ttl
在后续写入时更新(如果发生)。
2) 如果会话写入大量涌入,memcached 是否会自动扩展以消耗所有可用的 RAM?我可以指定内存分配吗?此外,如果数据激增,是否有任何最佳实践?当我看到 /etc/memcached.conf
时,似乎没有太多可以拉动的杠杆。
3) 成功将 ttl 添加到缓存的会话对象后,如何测试它是否实际工作?
如果能得到一个说明性的答案就太好了。
背景: 我一直依赖基于数据库的会话缓存,现在才考虑转向 cached_db
。因此,我对这个问题还不太了解。
我目前的缓存设置如下(设置在settings.py
):
CACHES = {
'default': {
'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION':'unix:/var/run/memcached/memcached.sock',
}
}
后端接受一个
TIMEOUT
setting. You can also specify a different timeout when setting a particular cache entry。Memcached 不会自动扩展。它在启动时接受一个
[ 而导致缓存逐出的情况。 =26=]-m
command line argument 来定义它应该用于缓存的最大内存量。这默认为 64MB。您也可以在操作期间使用命令cache_memlimit <limit in MB>
更改此限制。我不能说最佳实践是什么 - 认为这是确定你得到什么样的负载以及你是否需要更多内存以避免由于缺少 space.像这样:
from django.core.cache import cache cache.set('test_key', 'test_value', timeout=10) # Short timeout of 10 seconds # 10 seconds later cache.get('test_key') # Should return None because the entry has expired