ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Django中redis的使用(二)

2021-09-07 22:31:09  阅读:193  来源: 互联网

标签:缓存 中间件 MIDDLEWARE CACHE redis Django 设置 使用


2.手动操作redis

通过配置获取django_redis的get_redis_connection,进行操作,如下:

from django_redis import get_redis_connection

conn = get_redis_connection("default")  # redis.client.StrictRedis
# 支持所有redis的接口
conn.hset('hash_test','k1','v1')

# 也可以手动将数据清除
get_redis_connection("default").flushall()

# 得知连接池的连接数
get_redis_connection("default").connection_pool

3.全站缓存

主要使用两个中间件实现:

  • FetchFromCacheMiddleware :从缓存中读取数据

    • 缓存状态为200的GET和HEAD请求的响应(除非响应头中设置不进行缓存)

    • 对具有不同查询参数的相同URL的请求的响应被认为是各自不同的页面,并且被分别单独缓存。

    • 该中间件会使用与对应的GET请求相同的响应头来回答HEAD请求,即可以为HEAD请求返回缓存的GET响应。

  • UpdateCacheMiddleware :将数据更新到缓存中

    • 该中间件会自动在每个响应中设置几个headers:

      • 设置Expires为当前日期/时间 加上 定义的CACHE_MIDDLEWARE_SECONDS值,GMT时间

      • 设置响应的Cache-Control的max-age,值是定义的CACHE_MIDDLEWARE_SECONDS值。

    • 如果视图设置了自己的缓存时间(即设置了Cache-Control 的max age),那么页面将被缓存直到到期时间,而不是CACHE_MIDDLEWARE_SECONDS。

      使用装饰器 django.views.decorators.cache可以设置视图的到期时间(使用cache_control()装饰器,代码:@cache_control(max_age=3600))或禁用视图的缓存(使用never_cache()装饰器,代码:@never_cache)

    • 如果USE_I18N设置为True,则生成的缓存key将包含当前语言的名称,这样可以轻松缓存多语言网站,而无需自己创建缓存密钥。

    • 如果 USE_L10N设置为True 并且 USE_TZ被设置为True,缓存key也会包括当前语言

在settings的中间件中设置:

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    
    # 其他中间件...
    
    'django.middleware.cache.FetchFromCacheMiddleware',
]

注意:UpdateCacheMiddleware必须是第一个中间件,FetchFromCacheMiddleware必须是最后一个中间件

然后,将以下必需设置添加到Django的settings文件中:

  • CACHE_MIDDLEWARE_ALIAS - 用于存储的缓存别名。

  • CACHE_MIDDLEWARE_SECONDS - 每个页面应缓存的秒数。

  • CACHE_MIDDLEWARE_KEY_PREFIX - 用于生成缓存key的前缀,如果使用相同的Django安装在多个站点之间共享缓存,请将其设置为站点名称或此Django实例特有的其他字符串,以防止发生密钥冲突。如果你不在乎,请使用空字符串。

CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_SECONDS = 10
CACHE_MIDDLEWARE_KEY_PREFIX = ''

在视图中: 

def index(request):
    # 通过设置时间戳,进行多次访问,可以看到时间戳的变化,就可以得知是否是缓存页面了
    return HttpResponse('欢迎光临,当前时间戳:' + str(time.time()))

标签:缓存,中间件,MIDDLEWARE,CACHE,redis,Django,设置,使用
来源: https://blog.csdn.net/qq_53582111/article/details/120167369

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有