Django中两层缓存的实现

2024-04-26 10:20:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我的最终目标是为我想要的每个函数提供一个两层缓存(可能需要一个自我实现的装饰器) 我有多个虚拟机运行同一台Django服务器。第一个缓存层是内存,第二层是虚拟机之间的共享Redis。 该过程如下所示,为两层缓存修饰了一个函数。在函数调用的情况下,服务器在其内存缓存中查找该项。如果找不到它,那么它将签入共享Redis

我怎样才能做到这一点

我已经有了这个代码片段:

from cachetools.func import ttl_cache
from cache_memoize import cache_memoize

@ttl_cache(maxsize=settings.A_NUMBER, ttl=settings.CACHE_TIMEOUT)
@cache_memoize(settings.CACHE_TIMEOUT)
def my_fucn(arg1, arg2):
    some logic here.

Django设置:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': env.str('REDIS_MASTER'),
}

我读了这个(How to use 2 different cache backends in Django?),但我不知道是否有可能将它们用作装饰器

谢谢


Tags: django函数内存fromimport服务器rediscache
1条回答
网友
1楼 · 发布于 2024-04-26 10:20:40

您添加了正确的方法,但是decorator的顺序不正确,所以在您的示例中,它首先查询Redis,然后查询本地缓存,然后是函数调用

from cachetools.func import ttl_cache
from cache_memoize import cache_memoize


@cache_memoize(settings.CACHE_TIMEOUT)
@ttl_cache(maxsize=settings.A_NUMBER, ttl=settings.CACHE_TIMEOUT)
def my_func(arg1, arg2):
    pass

现在,它将首先检查ttl缓存,如果有它将返回的数据,如果没有,它将调用Redis cache方法以获得结果,如果Redis cache有它将返回的数据,否则它将调用函数以获得结果

相关问题 更多 >