Django 之 缓存框架

Django提供了一套强大的缓存框架,包括多种缓存后端如内存、文件、数据库和Memcached,用于提升网站性能,减少数据库访问。缓存可应用于全站、视图和模板片段,通过中间件和装饰器实现。Memcached作为一种高效的内存缓存服务,常被大型网站使用,但需要注意断电数据丢失的问题。配置缓存时,可设置TIMEOUT、OPTIONS等参数以控制缓存行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django的缓存

​ 动态网站的不足之处体现在“动态”上。每请求一个页面,Web 服务器都要做各种计算,为了让用户可以看到页面,要查询数据库、渲染模板,还要执行一些业务逻辑。从消耗方面来看,这个过程比从文件系统中读取一个文件要耗资源。

Django 提供了一个强健的缓存系统,能把动态页面保存起来,不用每次请求都重新生成。为了便于使用,Django 提供的缓存分为不同的粒度层次,可以缓存特定视图的输出、可以只缓存不易生成的片段,也可以缓存整个网站。

配置缓存

开发调试

Django提供了一个虚拟的缓存,它并不是真正的缓存,只是实现了缓存接口。

CACHES = {
   
    'default': {
   
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}

基于本地内存的缓存

如果你的本地主机内存够大够快,也可以直接使用它作为缓存。配置如下:

CACHES = {
   
    'default': {
   
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
    }
}

文件缓存

基于文件的后端会序列化各个缓存值,将其存入单独的文件

CACHES = {
   
    'default': {
   
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': 'c:/foo/bar',
    }
}

数据库缓存

Django 可以把缓存数据存入数据库。如果数据库服务器的索引稳定快速,这样做效果最好。以数据表为缓存后端的步骤如下:

CACHES = {
   
    'default': {
   
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
    }
}

但是在某些情况下,还是有一些用途的,比如你有一个高速、高效索引的数据库。

注意,创建缓存的数据库表使用的语句:

python manage.py createcachetable

Memcached

Memcached是Django原生支持的缓存系统,速度快,效率高。Memcached是一种基于内存的缓存服务,起初是为了解决LiveJournal.com的负载问题而开发的,后来由Danga开源。 它被类似Facebook和维基百科这种大型网站使用,用来减少数据库访问次数,显著地提高了网站的性能。

Memcached会启动一个守护进程,并分配单独的内存块。其主要工作就是为缓存提供一个快速的添加,检索,删除的接口。所有的数据直接存储在内存中,所以它不能取代数据库或者文件系统的功能。如果你对缓存很熟悉,这些内容都很好理解。

需要注意的是:

  • Memcached不是Django自带的软件,而是一个独立的软件,需要你自己安装、配置和启动服务;
  • Memcached安装好了后,还要安装Python操作Memcached的依赖库,最常用的是python-memcached和pylibmc;
  • 上面两个条件都满足了后,还要在Django中进行配置。

配置方法:

  • 根据你安装的Python依赖库不同,将CACHES的BACKEND设置为

    django.core.cache.backends.memcached.MemcachedCache
    或者
    django.core.cache.backends.memcached.PyLibMCCache
    
  • 设置LOCATION为你的Memecached守护进程所在的主机IP和进程端口,格式为ip:port的字符串。或者unix:path的形式,在Unix操作系统中。

下面是一个参考例子,Memcached运行在localhost (127.0.0.1) port 11211,使用了python-memcached库:

CACHES = {
   
    'default': {
   
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

下面的Memcached运行在本地的Unix socket上:/tmp/memcached.sock,依赖python-memcached


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值