Django缓存

一、Django缓存系统

动态网站的基本权衡是动态的。每次用户请求页面时,Web服务器都会进行各种计算-从数据库查询到模板渲染再到业务逻辑-创建站点访问者可以看到的页面。从处理开销的角度来看,这比标准的从文件系统中读取文件的服务器安排要昂贵得多。

1.1、配置缓存

缓存系统需要少量的设置。即,您必须告诉它缓存的数据应该存放在哪里-无论是在数据库中,在文件系统上还是直接在内存中。这是影响缓存性能的重要决定。是的,某些缓存类型比其他缓存类型更快。

1.1.1、Memcached

Memcached是Django原生支持的最快,最高效的缓存类型, 是一种完全基于内存的缓存服务器。
要将Memcached与Django结合使用,请执行以下操作:

  • 设置BACKEND为 django.core.cache.backends.memcached.MemcachedCache
  • 设置LOCATION为ip:port值,其中ip是Memcached守护程序的IP地址,port是运行Memcached的端口
# pip install python-memcached
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

关于Memcached的最后一点是基于内存的缓存有一个缺点:由于缓存的数据存储在内存中,因此如果服务器崩溃,数据将丢失。显然,内存不是用于永久性数据存储的,因此不要依赖基于内存的缓存作为唯一的数据存储.。

1.1.2、数据库高速缓存

Django可以将其缓存的数据存储在您的数据库中。如果您拥有快速索引良好的数据库服务器,则此方法效果最佳。
要将数据库表用作缓存后端,请执行以下操作:

  • 设定BACKEND为 django.core.cache.backends.db.DatabaseCache
  • 设置LOCATION为tablename,数据库表的名称。该名称可以是您想要的任何名称,只要它是数据库中尚未使用的有效表名即可。

创建缓存表

python manage.py createcachetable

1.1.3、缓存参数

  • TIMEOUT:用于缓存的默认超时(以秒为单位)。此参数默认为300秒(5分钟)。您可以设置TIMEOUT为None默认情况下,缓存键永不过期。值的值0使键立即过期(有效地“不缓存”)。
  • OPTIONS:应传递到缓存后端的所有选项。有效选项的列表将随每个后端而有所不同,并且由第三方库支持的缓存后端会将其选项直接传递给基础缓存库。
    - MAX_ENTRIES:删除旧值之前,缓存中允许的最大条目数。此参数默认为300
    - CULL_FREQUENCY:MAX_ENTRIES到达时被剔除的条目分数。实际比例为 ,因此设置为在达到时剔除一半的条目。此参数应为整数,默认为1。
  • KEY_PREFIX:一个字符串,它将自动包含(默认为前置)到Django服务器使用的所有缓存键中。
  • VERSION:Django服务器生成的缓存键的默认版本号。
  • KEY_FUNCTION 一个字符串,其中包含指向函数的虚线路径,该函数定义了如何将前缀,版本和键组成最终的缓存键。
    示例:文件系统后端的超时时间为60秒,最大容量为1000:
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/var/tmp/django_cache',
        'TIMEOUT': 60,
        'OPTIONS': {
            'MAX_ENTRIES': 1000
        }
    }
}

1.1.4、每个站点的缓存

一旦设置了缓存,使用缓存的最简单方法就是缓存整个站点。您需要添加 django.middleware.cache.UpdateCacheMiddlewaredjango.middleware.cache.FetchFromCacheMiddleware到您的 MIDDLEWARE设置。

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
     '''''''
]

1.1.5、视图缓存

使用缓存框架的更精细的方法是缓存单个视图的输出。django.views.decorators.cache定义一个cache_page 装饰器,该装饰器将自动为您缓存视图的响应。易于使用:

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def cache(request):
    """
    逻辑块
    """
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值