【问题标题】:Two layer cache implementation in djangodjango中的两层缓存实现
【发布时间】:2021-07-21 15:50:32
【问题描述】:

我的最终目标是为我想要的每一个函数都有一个两层缓存(可能需要一个自我实现的装饰器) 我有多个运行同一个 Django 服务器的虚拟机。第一个缓存层是内存,第二层是VM之间共享的Redis。 流程如下,一个函数被修饰为两层缓存。在函数调用的情况下,服务器会在其内存缓存中查找项目。如果找不到,则会检入共享的 Redis。

我怎样才能做到这一点?

我已经有了这个代码sn-p:

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?) 但我不知道是否可以将它们用作装饰器。

谢谢!

【问题讨论】:

    标签: python django caching redis memcached


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-07-31
      • 2013-02-26
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 2011-11-23
      相关资源
      最近更新 更多