django中的二层缓存实现

Two layer cache implementation in django

我的最终目标是每一个我想要的功能都有一个两层缓存(可能需要一个自己实现的装饰器) 我有多个虚拟机 运行 同一个 Django 服务器。第一层缓存是内存,第二层是VM之间共享的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?) 但我不知道是否可以将它们用作装饰器。

谢谢!

你已经添加了正确的方法,但是装饰器的顺序不正确,所以你的情况是先查询 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缓存如果有数据它会return如果没有它会调用Redis缓存方法来获取结果如果Redis缓存有数据它会return否则它会调用获取结果的函数。