将memcached用作Django的cached_db会话设置的缓存后端时,控制其超时

时间:2019-02-01 16:13:08

标签: django memcached

在Django项目中,使用cached_db类型的会话缓存:

1)如何控制缓存后端的time-out?例如,我希望保存在memcached中的每个会话数据对象的ttl为20天。此外,我希望此ttl更新后续的写入操作(如果发生)。

2)如果会话写入大量涌入,memcached是否会自动扩展以消耗所有可用的RAM?我可以指定内存分配吗?此外,如果数据激增,是否有最佳实践?当我看到/etc/memcached.conf时,似乎没有很多杠杆可以拉动。

3)一旦将ttl成功添加到缓存的会话对象中,如何测试它的实际作用?

真想得到一个说明性的答案。


背景:传统上,我依靠基于DB的会话缓存,直到现在才考虑转移到cached_db。因此,我在这个问题上有些绿色。

我当前的缓存设置如下(在settings.py中设置):

    CACHES = {
        'default': {
            'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION':'unix:/var/run/memcached/memcached.sock',
        }
    }

1 个答案:

答案 0 :(得分:1)

  1. 后端接受TIMEOUT设置。您还可以在setting a particular cache entry时指定其他超时。

  2. Memcached不会自动扩展。它在启动时接受-m command line argument来定义应用于其缓存的最大内存量。默认为64MB。您还可以在操作过程中使用命令cache_memlimit <limit in MB>更改此限制。我无法说说最佳实践是什么-认为这是确定要获得哪种负载以及是否由于空间不足而需要更多内存以避免缓存逐出的情况。

  3. 类似这样的东西:

    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