程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了django中的两层缓存实现大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决django中的两层缓存实现?

开发过程中遇到django中的两层缓存实现的问题如何解决?下面主要结合日常开发的经验,给出你关于django中的两层缓存实现的解决方法建议,希望对你解决django中的两层缓存实现有所启发或帮助; @H_674_2@我的最终目标是为我想要的每个函数都有一个两层缓存(可能需要一个自实现的装饰器) 我有多个 VM 运行相同的 Django 服务器。第一层缓存是内存,第二层是虚拟机之间共享的redis。 过程如下,一个函数被修饰为两层缓存。在函数调用的情况下,服务器在其内存缓存中查找项目。如果找不到,则在共享的redis中进行检查。

@H_674_2@我怎样才能做到这一点?

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

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.
@H_674_2@Django 设置:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.redisCache','LOCATION': env.str('redis_MASTER'),}
@H_674_2@我读过这个 (How to use 2 different cache BACkends in Django?) 但我不知道是否可以将它们用作装饰器。

@H_674_2@谢谢!

解决方法

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

大佬总结

以上是大佬教程为你收集整理的django中的两层缓存实现全部内容,希望文章能够帮你解决django中的两层缓存实现所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。