• Django 缓存系统


    Django 是动态网站,一般来说需要实时地生成访问的网页,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘等一次读出来 付出的成本大很多。

    缓存系统工作原理:

    对于给定的网址,尝试从缓存中找到网址,如果页面在缓存中,直接返回缓存的页面,如果缓存中没有,一系列操作(比如查数据库)后,保存生成的页面内容到缓存系统以供下一次使用,然后返回生成的页面内容。

     Django settings 中 cache 默认为

    {
        'default': {
            'BACKEND''django.core.cache.backends.locmem.LocMemCache',
        }
    }

    也就是默认利用本地的内存来当缓存,速度很快。当然可能出来内存不够用的情况,其它的一些内建可用的 Backends 有

    'django.core.cache.backends.db.DatabaseCache'
    'django.core.cache.backends.dummy.DummyCache'
    'django.core.cache.backends.filebased.FileBasedCache'
    'django.core.cache.backends.locmem.LocMemCache'
    'django.core.cache.backends.memcached.MemcachedCache'
    'django.core.cache.backends.memcached.PyLibMCCache'

    利用文件系统来缓存:

    CACHES = {
        'default': {
            'BACKEND''django.core.cache.backends.filebased.FileBasedCache',
            'LOCATION''/var/tmp/django_cache',
            'TIMEOUT'600,
            'OPTIONS': {
                'MAX_ENTRIES'1000
            }
        }
    }

    利用数据库来缓存,利用命令创建相应的表:python manage.py createcachetable cache_table_name

    CACHES = {
        'default': {
            'BACKEND''django.core.cache.backends.db.DatabaseCache',
            'LOCATION''cache_table_name',
            'TIMEOUT'600,
            'OPTIONS': {
                'MAX_ENTRIES'2000
            }
        }
    }

    下面用一些实例来说明如何使用 Django 缓存系统

    一般来说我们用 Django 来搭建一个网站,要用到数据库等。

    from django.shortcuts import render
    def index(request):
        # 读取数据库等 并渲染到网页
        # 数据库获取的结果保存到 queryset 中
        return render(request, 'index.html', {'queryset':queryset})

    像这样每次访问都要读取数据库,一般的小网站没什么问题,当访问量非常大的时候,就会有很多次的数据库查询,肯定会造成访问速度变慢,服务器资源占用较多等问题。

    from django.shortcuts import render
    from django.views.decorators.cache import cache_page
     
    @cache_page(60 * 15# 秒数,这里指缓存 15 分钟,不直接写900是为了提高可读性
    def index(request):
        # 读取数据库等 并渲染到网页
        return render(request, 'index.html', {'queryset':queryset})

    当使用了cache后,访问情况变成了如下:

    访问一个网址时, 尝试从 cache 中找有没有缓存内容
    如果网页在缓存中显示缓存内容,否则生成访问的页面,保存在缓存中以便下次使用,显示缓存的页面。
    given a URL, try finding that page in the cache
    if the page is in the cache:
        return the cached page
    else:
        generate the page
        save the generated page in the cache (for next time)
        return the generated page

    Memcached 是目前 Django 可用的最快的缓存

    另外,Django 还可以共享缓存。

    Django 缓存机制详解http://www.sharejs.com/codes/python/6471

  • 相关阅读:
    Python入门-函数进阶
    Python入门-初始函数
    Leetcode300. Longest Increasing Subsequence最长上升子序列
    Leetcode139. Word Break单词拆分
    Leetcode279. Perfect Squares完全平方数
    Leetcode319. Bulb Switcher灯泡开关
    Leetcode322. Coin Change零钱兑换
    二叉树三种遍历两种方法(递归和迭代)
    Leetcode145. Binary Tree Postorder Traversal二叉树的后序遍历
    Leetcode515. Find Largest Value in Each Tree Row在每个树行中找最大值
  • 原文地址:https://www.cnblogs.com/zknublx/p/6289964.html
Copyright © 2020-2023  润新知