• 缓存


    动态网站的问题在于它是动态的,也就是说每次用户访问呢,服务器都要执行数据库查询,启动模板,执行业务逻辑以及最终看到你想看到的一个页面,这一切都是动态

    生成的,也是比较昂贵的。

    缓存的目的是为了避免重复计算,特别是一些比较耗时间,资源的。Django提供了不同粒度数据的缓存,你可以缓存整个页面,也可以缓存某个部分,甚至整个网站。

    设定缓存

    缓存系统需要一些少量的设定工作,也就是说,你必须告诉他缓存的数据应该放到哪里,在数据库中,在文件系统,后者是直接在内存中,这个是一个重要的决定,影响您的告诉缓存的性能

    是的,有些类型的缓存比其他类型快。

    缓存设置在settings文件的CACHE_BACKEND中,这里是一个CACHE——BACKEND所有可用值的解释。

    内存缓存

    memcached是迄今为止可以用于Django中的最快,最有效的缓存类型,Memcached是完全基于内存的缓存框架,最初开发它是用以处理高负荷的livejournal.com随后是Django  Inbteractive公司开源。它被用于一些站点,例如facebook和维基百科网站,以减少数据库访问,并且大幅提高网站的性能。

    Memcached是免费的的,他作为一个守护进程的运行,并分配了特定数量的内存,他只是提供了添加,检索和删除缓存中的任意数据的高速接口。所有数据都是直接存储在内存中,所以没有-对使用的数据库或者文件系统的开销。

    CACHE_BACKEND = 'memcached://127.0.0.1:11211/'

    Memcached的一个极好的特性是他在多个服务器分享缓存的能力,这意味着您可以在多台机器上运行Memcache的守护进程,该程序会把这些机器当成一个单一缓存,而无需重复在每台机器上运行缓存值,要充分利用此功能,请在CACHE_BACKEND里面引入所有服务器的地址,用分号分隔。

    最后有关Memcached的一点是,基于内存的缓存有一个重大的缺点,由于缓存的数据存储在内存中,所以如果您的服务器崩溃,数据将会消失,显然,内存不是用来持久化数据的,因此不要基于内存的缓存作为您唯一的存储数据的缓存,毫无疑问,在Django的缓存后端不应该用于持久化,他们本来被设计成缓存的解决方案,但是我们任然指出此点,这里是因为基于内存的缓存知识暂时的。

    CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'

    数据库缓存

    为了使用数据库缓存后端,首先在数据库中运行这个命令以创建缓存表:

    python manage.py createcachetable [cache_table_name]

    这里的[cache_table_name]是要创建的数据库表名(这个名字自己取)

    ,这个命令以Djangio的数据库缓存系统所期望的格式创建一个表。

    CACHE_BACKEND=‘db://my_cache_table’

    数据库缓存后端使用settings文件指定的同一个数据库,那么数据库缓存的效果最明显。

    文件系统缓存

    要把缓存项目放在文件系统中,请为CACHE_BACKEND使用/'fileL//'的缓存类型,例如,要把缓存数据可以缓存在/var/tmp/django_cache,如果使用的是windows,在file://之后加上文件的驱动器号。

    file://c:/foo/bar

    目录路径应该是绝对路劲,要改是以你的文件系统的根开始,在设置的结尾放置斜线与否无关紧要。

    确认该设置指向的目录存在并且你的Web服务器运行的系统的用户可以读写该目录。 继续上面的例子,如果你的服务器以用户apache运行,确认/var/tmp/django_cache存在并且用户apache可以读写/var/tmp/django_cache目录。

    每个缓存值将被存储为单独的文件,其内容是Python的pickle模块以序列化(“pickled”)形式保存的缓存数据。 每个文件的名称是缓存键,以规避开安全文件系统的使用。

    本地内存缓存

    如果你想利用内存缓存的速度优势,但又不能使用Memcached,可以考虑使用本地存储器缓存后端。 此缓存的多进程和线程安全。 设置 CACHE_BACKEND 为 locmem:/// 来使用它,例如:

    CACHE_BACKEND = 'locmem:///'
  • 相关阅读:
    element UI input 框不能输入问题
    微信小程序 自定义header 组件
    React 父组件调用子组件函数
    node 分页查询时,如何获取总数和分页数据
    Linux 根据jar包名杀死进程
    使用小乌龟TortiseGit生成密钥教程详解
    SQL/变量
    SQL/视图
    SQL/事务控制语言TCL(Transaction Control Language)
    SQL/数据定义语言DDL(Data Definition Language)
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/11029578.html
Copyright © 2020-2023  润新知