django请求中存储的django缓存后端

django-in-request-cache的Python项目详细描述


Django缓存后端存储在Django请求中

https://travis-ci.org/mojeto/django-in-request-cache.svg?branch=master&maxAge=259200https://img.shields.io/pypi/v/django-in-request-cache.svg?maxAge=259200https://img.shields.io/pypi/l/django-in-request-cache.svg?maxAge=2592000

安装

$ pip install django-in-request-cache

快速请求缓存

inrequestcache是django缓存接口的实现。 它使用分配给每个django请求对象的python dict实例来存储缓存值。 django-globals用于使请求对象在任何地方都可访问。 此缓存具有与标准django内存缓存相同的限制-不可能进行跨进程访问。 inrequestcache更进一步,使得跨线程访问变得不可能。 inrequestcache在每个请求中都不同。 inrequestcache应该比inmemory快,因为没有读/写锁。 对于在同一请求中可以多次访问的值,使用inrequestcache是有意义的。 缓存失效是很难的,但因为缓存只在请求期间存在,所以这不是一个大问题。

快速启动

  1. 将“django in request cache”添加到您的设置中,如下所示:

    from django.conf.global_settings import CACHES as DEFAULT_CACHES
    
    CACHES = dict(
        DEFAULT_CACHES,
        cache_in_request={
            'BACKEND': 'django_in_request_cache.cache.InRequestCache',
            # 'LOCATION': '_dinr_cache',  # request property name to store data
            # 'OPTIONS': {
            #     # if set then no value is stored for more than MAX_TIME time.
            #     'MAX_TIMEOUT': 10,  # in seconds,
            # },
        },
    )
    
  2. 将django globals中间件添加到您的设置中,如下所示:

    MIDDLEWARE_CLASSES = [
        ...,
        'django_globals.middleware.Global',
    ]
    

用更快的缓存加速较慢的缓存

为什么要缓存缓存? 在我的例子中,redis缓存中有一个值,在同一个django请求期间访问了20次。 每次从redis读取需要大约1毫秒,它会使大约20毫秒只读取相同的值20次。 为了加快速度,我希望将我的值缓存在更快的缓存中(inrequestcache、inmemorycache等)。 cacheacache类是django缓存接口的实现,它允许从较慢的缓存读取值 只需一次,然后在更快的内存缓存中再次“缓存”它。 大多数情况下,较快的缓存是从较慢的缓存中重新填充的。在这种情况下,我们没有价值到期时的信息。 在这种情况下,缓存值的缓存最大过期时间为值过期时间+缓存慢速过期时间。 因此,应将快速缓存过期时间设置得非常低(以秒为单位)。

cacheacache配置

  • 如何缓存速度较慢但跨进程的缓存后端:

    from django.conf.global_settings import CACHES as DEFAULT_CACHES
    
    CACHES = dict(
        DEFAULT_CACHES,
        redis_cache = {
            'BACKEND: 'redis_cache.RedisCache',
            ...
        },
        cache_in_request={
            'BACKEND': 'django_in_request_cache.cache.InRequestCache',
            'LOCATION': '_redis_cache_mirror',  # request property name
        },
        combined_in_request_and_redis_cache={
            'BACKEND': 'django_in_request_cache.cache.CacheACache',
            'OPTIONS: {
                'FAST_CACHE': 'cache_in_request',  # cache alias
                'FAST_CACHE_MAX_TIMEOUT': 5,  # in seconds
                'CACHE_TO_CACHE': 'redis_cache',  # cache alias
            },
        },
    )
    

要求

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
windows请帮助获取java。运行程序时发生lang.nullpointerexception   JPA标准中的错误:java。lang.IllegalArgumentException:此JPQLquery中没有名为“:inputMsgId_1_”的参数   java调度一个小程序,从ScheduledExecutorService开始   java点击AVD“创建设备”按钮抛出NullPointerException   缓存Java9WebStart会多次加载jar文件   使用java计算最小二乘   当代理关闭时,java kafka生产者不会抛出异常   我们什么时候以及为什么要在java中进行自定义序列化?   java使用GSON解析包含包含所需字符串的对象的对象数组   java如何使用BOBJ REST API实现分页?   java身份验证失败:用户的凭据已过期。CAS v4。2.   合并排序中的java无限循环?   java jackson xml将pojo子元素转换为字符串   tcp Java ObjectOutputStream重置错误   如何调用。bat文件,并使用java中的ProcessBuilder发送字符串   奇怪的Java数学结果   java如何在Android中禁用最近的活动按钮?   java刷下应用程序崩溃   使用Java收集所有VersionOne资产及其所有属性   Java打印:创建具有最小可接受边距的页面格式