首页 > 解决方案 > Django-admin 自定义命令不存储缓存值

问题描述

使用 django 命令时出现意外行为。

我正在使用标准的 Django 缓存系统。我的设置 :

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
        'TIMEOUT': 0,
    }
}

这是我的命令代码:

#coding: utf-8
import os
import sys
import time

from django.core.management.base import BaseCommand
from django.core.cache import cache

class Command(BaseCommand):

    def handle(self, *args, **options):
        print(cache.get("mykey"))
        print(cache.set("mykey", "TEST", 300))

当我在同一分钟内运行它两次时,我得到以下输出:

(venv_crypto_bot) macbook-pro:project dauzon$ python manage.py generate_data
None
None
(venv_crypto_bot) macbook-pro:project dauzon$ python manage.py generate_data
None
None

我在开发服务器上。

显然,当我使用命令时,Django 不会将值存储在缓存中。我不知道是不是因为我运行了开发服务器。

当我访问我的开发服务器的网页时,缓存运行正常。

Django 文档中没有关于禁用缓存(根据命令)的详细信息。

如何在 Django 自定义命令中存储缓存值?

标签: pythondjangocaching

解决方案


问题可能是您正在运行未通过多个流程实例共享的LocMemCache

请注意,每个进程都有自己的私有缓存实例,这意味着不可能进行跨进程缓存。这显然也意味着本地内存缓存的内存效率不是特别高,因此它可能不是生产环境的好选择。有利于发展。


推荐阅读