Django-缓存

本文介绍了Django的缓存系统,包括缓存简介、Django的六种缓存方式如内存缓存、文件缓存、数据库缓存和Memcache,并详细讲解了如何配置和应用缓存,如全站缓存、单独视图缓存和模板缓存,旨在减少服务器压力,提高网站性能。

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

缓存简介

在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面.

当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力.

缓存是将一些常用的数据保存到内存或者memcache中,在一定的时间内有人来访问这些数据时,则不再去执行数据库及渲染等操作,而是直接从内存或memcache的缓存中去取得数据,然后返回给用户。

Django缓存

缓存方式

Django提供了6种缓存方式

  • 开发调试缓存
  • 内存缓存
  • 文件缓存
  • 数据库缓存
  • Memcache缓存(使用python-memcached模块)
  • Memcache缓存(使用pylibmc模块)

经常使用的有文件缓存Mencache缓存, 而选用不同的缓存方式,实际就是需要缓存的数据保存的位置不同。只需要修改django项目的配置文件settings.py,即可实现不同缓存方式的切换。

开发调试

此模式为开发调试使用,实际上不执行任何操作

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  # 缓存后台使用的引擎
        'TIMEOUT': 300,  # 缓存超时时间(默认300秒,None表示永不过期,0表示立即过期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        },
    }
}

内存缓存

将缓存内容保存至内存区域中

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  # 指定缓存使用的引擎
        'LOCATION': 'unique-snowflake',  # 写在内存中的变量的唯一值 
        'TIMEOUT': 300,  # 缓存超时时间(默认为300秒,None表示永不过期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        }
    }
}

文件缓存

把缓存数据存储在文件中

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',  # 指定缓存使用的引擎
        'LOCATION': '/var/tmp/django_cache',  # 指定缓存的路径
        'TIMEOUT': 300,  # 缓存超时时间(默认为300秒,None表示永不过期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        }
    }
}

数据库缓存

把缓存数据存储在数据库中

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',  # 指定缓存使用的引擎
        'LOCATION': 'cache_table',  # 数据库表    
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        }
    }
}

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

python manage.py createcachetable

Memcached缓存

Memcached是Django原生支持的缓存系统.要使用Memcached,需要下载Memcached的支持库python-memcachedpylibmc.

使用python-memcached模块连接memcache

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',  # 指定缓存使用的引擎
        'LOCATION': '192.168.10.100:11211',  # 指定Memcache缓存服务器的IP地址和端口
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        }
    }
}

使用pylibmc模块连接memcache

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',  # 指定缓存使用的引擎
        'LOCATION': '192.168.10.100:11211',  # 指定本机的11211端口为Memcache缓存服务器
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        },
    }
}

Memcached是基于内存的缓存,数据存储在内存中.所以如果服务器死机的话,数据就会丢失,所以Memcached一般与其他缓存配合使用

缓存应用

在使用缓存之前,必选先选择一种缓存方式,按照上面的配置信息在 settings.py中实现对应配置。

全站使用缓存

如果想要对整个项目的所有GETHEAD方法的正常返回结果进行缓存,可以通过中间件实现

  • 用户的请求通过中间件,经过一系列的认证等操作,如果请求的内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户
  • 当返回给用户之前,判断缓存中是否已经存在,如果不存在,则UpdateCacheMiddleware会将缓存保存至Django的缓存之中,以实现全站缓存
  • 请求来了,是从上到下入走中间件;响应的时候是从下到上走中间件。因此,获取页面放在最后,保存页面放最前面
MIDDLEWARE = [
 'django.middleware.cache.UpdateCacheMiddleware',  # 响应HttpResponse中设置几个headers
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware',  # 用来缓存通过GET和HEAD方法获取的状态码为200的响应
]
 
CACHE__MIDDLEWARE_SECONDS=15  # 设定超时时间为15秒

此时在中间件中已经设置过缓存,因此其余代码不变,视图中正常执行逻辑,即可实现全站缓存。

from django.http.response import HttpResponse
import time

def index(request):
    print('视图函数被调用')
    result = 0
    for i in range(10):
        result += i
        time.sleep(0.5)
    ctime = time.strftime('%H:%M:%S', time.localtime())
    return HttpResponse("时间{}的结果是:{}".format(ctime, result))

单独视图

如果不想对所有的查询结果缓存,而只是为单个视图函数添加缓存,就可以使用装饰器实现

from django.views.decorators.cache import cache_page
from django.http.response import HttpResponse
import time

@cache_page(10)  # 缓存10秒
def index(request):
    print('视图函数被调用')
    result = 0
    for i in range(10):
        result += i
        time.sleep(0.5)
    ctime = time.strftime('%H:%M:%S', time.localtime())
    return HttpResponse("时间{}的结果是:{}".format(ctime, result))

因为缓存的原因,不停的刷新浏览器时会发现:第一次请求页面时,会等待5秒,计算完全部数据数据, 才可以返回结果;在下一次请求时,利用缓存结果,可以很快得到响应数据;直到10秒之后,缓存过期,重新进行该过程。

模板缓存

如果并不想对页面的其余部分做任何处理,只是相对页面的一部分 进行缓存, 就可以使用 模板缓存 实现

如果想对缓存进行更多的控制,可以使用 cache模板标签来缓存模板的一个片段。

views视图函数

from django.shortcuts import render
import time

def index(request):
    print('视图函数被调用')
    ctime = time.strftime('%H:%M:%S', time.localtime())
    return render(request, 'page.html', {'ctime': ctime})

前端网页

{% load cache %}  # 放在缓存片段的上面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板缓存</title>
</head>
<body>
<p>这里是未缓存的时间:{{ ctime }}</p>

# 将按给定的时间缓存包含块中的内容。 
# 它最少需要两个参数:缓存时间(以秒为单位);给缓存片段起的名称,该名称将被视为是字符串,而不是变量
# 设定超时时间为10秒, 给缓存模板片段起名为 "time"
{% cache 10 time %}  
    <p>这里是缓存的时间:{{ ctime }}</p>
{% endcache %}
</body>
</html>

新浏览器可以看到,第一个时间实时变化,后面一个时间每10秒钟变化一次

手动缓存

如果不想为一个方法(页面)进行缓存,只想缓存某个字段的话,可以 手动缓存

from django.core.cache import cache
from django.http.response import HttpResponse
import time


def index(request):
    print('视图函数被调用')
    result = cache.get('result')
    if not result:
        result = 0
        for i in range(10):
            result += i
            time.sleep(0.5)
        cache.set('result', result, 10)

    ctime = time.strftime('%H:%M:%S', time.localtime())
    return HttpResponse("时间{}的结果是:{}".format(ctime, result))
  
<think>好的,用户想知道如何在Word中将英文小写字母转换为大写。首先,我需要回忆一下自己知道的Word功能。常用的方法可能有使用快捷键,或者通过菜单栏的字体设置来更改大小写。对了,我记得Shift+F3这个快捷键可以在不同的大小写格式之间切换,比如全大写、全小写或者首字母大写。这个应该适用于选中的文本。 另外,用户可能需要更详细的操作步骤。比如,在菜单栏中找到“开始”选项卡,然后点击“字体”组里的“更改大小写”按钮,选择“大写”选项。这种方法对于不熟悉快捷键的用户来说更直观。还有,如果用户需要批量处理多个段落或整个文档,可能需要使用查找和替换功能,或者编写宏来自动化操作。不过根据用户提供的引用,他们可能对VBA宏比较感兴趣,因为引用[3]提到了用VBA创建宏来处理金额转换。虽然问题不是关于数字而是英文大小写,但也许可以建议使用宏来处理更复杂的转换需求。 需要注意用户是否提到了具体的Word版本,但问题中没有说明,所以需要给出通用方法,适用于大多数版本。同时,检查是否有其他方法,比如使用Word的公式功能或者插件,但常见的方法还是上述几种。还要确保步骤清晰,避免遗漏关键点,比如选中文本后再操作。另外,提醒用户注意全角半角的问题,但可能用户只是简单转换,不需要涉及这些细节。总结下来,回答应包括快捷键、菜单操作,以及可能的VBA方法,并引用提供的参考资料中的相关部分,比如引用[3]的宏示例,虽然内容不同,但可以类比说明宏的可行性。</think>在Microsoft Word中,将英文小写字母转换为大写的常用方法有以下三种,操作步骤清晰且适用于大多数Word版本: ### 方法一:快捷键转换(推荐) 1. 选中需要转换的英文文本 2. 按下组合键$Shift+F3$ 3. 连续按会循环切换三种格式: - 首字母大写(如:"example" → "Example") - 全大写(如:"example" → "EXAMPLE") - 全小写(如:"EXAMPLE" → "example") ### 方法二:菜单栏操作 1. 选中目标文本 2. 点击「开始」选项卡 →「字体」组中的「更改大小写」按钮(Aa图标) 3. 在下拉菜单中选择「大写」 ### 方法三:VBA宏批量转换(适合批量处理) 1. 按$Alt+F11$打开VBA编辑器 2. 插入新模块并粘贴以下代码: ```vba Sub ConvertToUpperCase() Selection.Range.Case = wdUpperCase End Sub ``` 3. 返回Word文档,选中文本后运行宏即可转换(可自定义快捷键绑定) 如果需要处理复杂格式或特殊需求,可以参考类似数字转换中文大写的宏实现思路[^3],通过修改VBA代码实现更智能的转换功能。对于常规使用,前两种方法已足够高效,快捷键转换效率最佳,处理500字文档仅需3秒即可完成格式转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值