【问题标题】:Temporarily Disabling Django Caching暂时禁用 Django 缓存
【发布时间】:2021-10-29 03:55:30
【问题描述】:

如何在每次结账时禁用 Django 缓存?

回到 Django 1.3 之前,我可以通过在 settings.py 导入的 settings_local.py 中指定 CACHE_BACKEND = None 来禁用本地开发结帐的缓存。 settings_local.py 被 SVN 忽略了,所以我总是可以确保我的本地环境没有缓存,而不必担心修改 settings.py 中的缓存参数。

现在,使用 Django 1.3 和新的 CACHES = {...} 结构,设置 CACHES = NoneCACHES['default']['BACKEND'] = None 会导致 Django 阻塞,设置 CACHES = {} 似乎仍然可以启用基本缓存。

【问题讨论】:

    标签: python django


    【解决方案1】:

    Dummy Caching (for development) - 这实现了缓存接口,但实际上并不缓存,因此您可以在您的开发/测试站点上使用它来减少缓存并防止缓存错误(如果应该出现)。

    最后,Django 带有一个“虚拟”缓存,它实际上并不缓存——它只是实现了缓存接口而不做任何事情。

    如果您的生产站点在各个地方使用重型缓存,但在开发/测试环境中您不想缓存并且不想将代码更改为特殊情况,这将非常有用后者。要激活虚拟缓存,请像这样设置 BACKEND:

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
        }
    }
    

    【讨论】:

    • 在开发中使用虚拟缓存不会导致缓存错误吗?
    • @MareksNo,是的,您可以使用 DummyCache 来避免在您的开发环境中缓存错误,甚至在您的 CI/CD 管道的初始测试期间。
    【解决方案2】:

    我在我的设置中使用它,所以如果我确实想测试部署的缓存(在本例中为 memcache)的使用情况,它会更灵活一些

    TEST_MEMCACHE = False
    if not DEBUG or TEST_MEMCACHE:
        CACHES = {
            'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': '127.0.0.1:11211',
            }
        }
    else:
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
            }
    }
    

    【讨论】:

      【解决方案3】:

      多个缓存的解决方案,您想禁用所有缓存:

      if True:
          CACHES = {
              k : {'BACKEND': 'django.core.cache.backends.dummy.DummyCache',}
              for k,v in CACHES.iteritems()
          }
      

      如果您想禁用某些缓存的解决方案,可能会有所帮助:

      if True:
          disable_names = [ 'cache_name' ]
          for name in disable_names:
              CACHES[name] = {'BACKEND' : 'django.core.cache.backends.dummy.DummyCache',}
      

      【讨论】:

        【解决方案4】:

        在使用 DRF 时,在某些视图中,我会使用 django.views.decorators.cache.cache_page 启用缓存。接受的答案对我不起作用,我求助于在拆除时清除缓存

        from django.core.cache import cache
        from rest_framework.test import APITestCase
        
        class SomeTestCase(APITestCase):
        
            def tearDown(self):
                cache.clear()
        
        

        【讨论】:

          【解决方案5】:

          为此,您可以使用“虚拟”缓存后端。 Django 带有一个实际上并不缓存的“虚拟”缓存——它只是实现了缓存接口而不做任何事情。

          这里是old stylenew style 配置格式。

          1. 旧式

            要激活虚拟缓存,请像这样设置 CACHE_BACKEND:

            CACHE_BACKEND = 'dummy://'

          2. 新风格

            CACHES = {
                'default': {
                    'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
                }
            }
            

          【讨论】:

            猜你喜欢
            • 2012-07-14
            • 1970-01-01
            • 2014-06-14
            • 2022-08-11
            • 1970-01-01
            • 2010-12-25
            • 1970-01-01
            • 2019-08-29
            • 2020-07-30
            相关资源
            最近更新 更多