跳转到主要内容

未提供项目描述

项目描述

django-cache-mock

使用进程内模拟以避免在开发期间为Django设置外部缓存。

Django有一个有限的内置django.core.cache.backends.locmem.LocMemCache,为了帮助开发,但Django使用一些魔法来始终提供工作连接。

我有一些理由这样滥用Django缓存

  • 线程安全:Django为每个线程创建一个连接以避免与线程不安全驱动程序的问题。
  • 良好的默认值:Django使用良好的默认值运行连接。
  • 连接重用:Django已经有一个运行池,在大多数情况下最好使用它。

安装

$ pip install django-cache-mock

此外,还可以使用您想要的后端进行安装。

对于mockcache,它安装了mockcache3,它是原始包的分支,因为它不适用于新的Python版本。

$ pip install django-cache-mock[mockcache]
$ pip install django-cache-mock[fakeredis]
$ pip install django-cache-mock[redislite]

如何使用

在您的Django设置中已经定义了CACHES

对于memcached,它看起来像这样

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
        "LOCATION": os.getenv("MEMCACHED_HOSTS"),
        "OPTIONS": {
            "no_delay": True,
            "ignore_exc": True,
            "max_pool_size": 4,
            "use_pooling": True,
        },
    },
}

只需调用django_cache_mock.patch来替换为模拟后端。

该库仅当缓存位置未定义时才会修补。

import django_cache_mock

if DEBUG:  # Apply it only in debug mode to be extra careful.
    django_cache_mock.patch(CACHES, "default", "mockcache")

此修补程序用模拟缓存替换缓存。对于mockcache,

自定义缓存选项

patch函数接受自定义参数。它可以用来覆盖模拟行为,例如,由LOCATION定义的redislite将使用的数据库文件。

django_cache_mock.patch(CACHES, "default", "redislite", {"LOCATION": "data/redis.db"})

Redis后端

Redis有几种运行选项。此库实现了fakeredisredislite,与django.core.cachedjango-redis一起使用。

默认情况下,该库尝试保持原始实现的行为。如果配置使用 django-redis,当您设置使用后端 fakeredis 时,它将使用 fakeredis[django-redis]

# Force to use django-redis. It is not necessary, the lib already try to use
# django-redis if cache uses `django_redis.cache.cache.RedisCache`.
django_cache_mock.patch(CACHES, "redis", "fakeredis[django-redis]")
django_cache_mock.patch(CACHES, "redis", "redislite[django-redis]")

如何访问连接

从缓存获取 Django memcached 和 redis 客户端

from django.core.cache import caches

def give_me_memcached():
    return caches["memcached"]._cache

# for django.core.cache.backends.redis
def give_me_primary_redis():
    return caches["redis"]._cache.get_client(write=True)

def give_me_secondary_redis():
    return caches["redis"]._cache.get_client()

# for django-redis
def give_me_primary_redis():
    return caches["redis"].client.get_client()

def give_me_secondary_redis():
    return caches["redis"].client.get_client(write=False)

# Yes, django and django-redis have different write flag defaults.

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

django_cache_mock-0.0.3.tar.gz (5.5 kB 查看哈希值)

上传时间

构建分布

django_cache_mock-0.0.3-py3-none-any.whl (6.1 kB 查看哈希值)

上传时间 Python 3

由以下提供支持