未提供项目描述
项目描述
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有几种运行选项。此库实现了fakeredis
和redislite
,与django.core.cache
或django-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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cadcaf6f83db551dbe19be503012f6a3c77035d69d709d377806c8d60340feef |
|
MD5 | ce936cc49b1dfc6e8543bef70bc10a92 |
|
BLAKE2b-256 | 672c4551dcf3478879496a333641573f2706301a56c2d5a6da98b1c8ef5570c4 |
关闭
django_cache_mock-0.0.3-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7bf0a8fde24452bf91fc60590ec68f4ce8c506275a6a59b1c18c91464845a954 |
|
MD5 | 1edf8381ad18e119d66f98bece1037ba |
|
BLAKE2b-256 | 9909f45db26ca9c272ef1c53b6c9b9e1413a484bc9db25781cf44f0dced8fe7f |