django memcached/redis缓存 =====缓存session

  • 全站使用

例如 博客等缓存,通过中间件实现全站缓存。

加缓存中间件,那么多中间件加在什么位置?

请求时:缓存加在中间件里的最后一个,比如一次经过1、2、3、4中间件,加在4

返回事:缓存加在中间件里的第一个,如上返回依次经过4、3、2、1,加在1

django 中,导入模块,可以实现。

# 使用中间件,经过一系列的认证等操作,
# 如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,
# 当返回给用户之前,判断缓存中是否已经存在,
# 如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存
    MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',  # 只有process_response
        # 其他中间件...
        'django.middleware.cache.FetchFromCacheMiddleware',  # 只有process_view
    ]

    CACHE_MIDDLEWARE_ALIAS = ""
    CACHE_MIDDLEWARE_SECONDS = ""
    CACHE_MIDDLEWARE_KEY_PREFIX = ""

2.2 应用多个缓存时生效的优先级

另外:session引擎缓存配置,就是放在这里的缓存里。

如果同时应用了两个级别的缓存,比如views缓存和模板局部缓存,哪个生效?

哪个生效,和请求的声明周期的有关系的

所以最先生效的是全站、之后views、最后模板局部缓存。

 

 

 

django-redis的应用

# =================django-redis============

settings.py配置cache

CACHES = {
  "default": {
  "BACKEND": "django_redis.cache.RedisCache",
  "LOCATION": "redis://127.0.0.1:6379",
  "OPTIONS": {
  "CLIENT_CLASS": "django_redis.client.DefaultClient",
  "CONNECTION_POOL_KWARGS": {"max_connections": 100}     #最大连接数,redis开启连接池pool
  # "PASSWORD": "密码",   #redis默认没有密码
  }}
  }

视图函数中使用
  from django_redis import get_redis_connection   conn = get_redis_connection("default")

缓存session(通过redis/memcache之类)
  配置 settings.py
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 启用cache引擎
    SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
 
    SESSION_COOKIE_NAME = "sessionid"                        # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
    SESSION_COOKIE_PATH = "/"                                # Session的cookie保存的路径
    SESSION_COOKIE_DOMAIN = None                              # Session的cookie保存的域名
    SESSION_COOKIE_SECURE = False                             # 是否Https传输cookie
    SESSION_COOKIE_HTTPONLY = True                            # 是否Session的cookie只支持http传输
    SESSION_COOKIE_AGE = 1209600                              # Session的cookie失效日期(2周)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                   # 是否关闭浏览器使得Session过期
    SESSION_SAVE_EVERY_REQUEST = False                        # 是否每次请求都保存Session,默认修改之后才保存
 
 
通过django的内置模块,连接缓存
from django.core.cache import cache
cache.has_key('name')#判断是否有key等于name
cache.set(key,value,timeout='过期时间') timeout可选参数
cache.get(key)
posted @ 2019-06-29 14:11  coding天荒地老  阅读(327)  评论(0编辑  收藏  举报