Djnago中缓存配置(redis配置案例)

Django中提供了6种缓存方式:

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

配置文件

# 内存
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
        'TIMEOUT': 300,  # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
        'OPTIONS': {
            'MAX_ENTRIES': 100,  # 最大缓存个数(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        },
    }
}

应用

视图中缓存

  • 视图缓存只需要加上一个cache_page即可
from django.views.decorators.cache import cache_page


@cache_page(5)
def student_list(request, *args, **kwargs):
    students = models.Student.objects.all()
    print('students')
    return render(request, 'student_list.html', {'students': students})

全栈缓存

  • 修改配置文件
MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
        ....
    'django.middleware.cache.FetchFromCacheMiddleware',
]

#使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用 FetchFromCacheMiddleware 获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware 会将缓存保存至缓存,从而实现全站缓存。

模板局部缓存

  • 使用内建的自定义标签
{% load cache %}

{% cache 5 'xxx' %}

    缓存
    {{ now }}

{% endcache %}

使用redis做缓存实例

#1.安装 pip install django-redis
#2.在stting中配置CACHES,可以设置多个缓存,根据名字使用
        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}
                    # "PASSWORD": "密码",
                }
            }
        },
        #另添加缓存
        "JERD": { }
#3.根据名字去连接池中获取连接,视图中连接(手动操作redis)
from django.shortcuts import HttpResponse
from django_redis import get_redis_connection

def index(request):
    r = get_redis_connection("default")
    r.hmset("name_a", {"key_a": "value_a", "key_b": "value_b"})
    return HttpResponse("设置redis")

def order(request):
    r = get_redis_connection("default")
    val = r.hmget("name_a", ["key_a", "key_b"])
    print(val)  # [b'value_a', b'value_b']
    return HttpResponse("获取redis")

中间件:全站使用缓存

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',  # 放在第一
    # 其他中间件...
    'django.middleware.cache.FetchFromCacheMiddleware',  # 放在最后
]

CACHE_MIDDLEWARE_ALIAS = ""          # 用于存储的缓存别名
CACHE_MIDDLEWARE_SECONDS = 600       # 每个页面应缓存的秒数 
CACHE_MIDDLEWARE_KEY_PREFIX = ""     # 如果使用相同的Django安装在多个站点之间共享缓存,请将其设置为站点名称或此Django实例特有的其他字符串,以防止发生密钥冲突。如果你不在乎,请使用空字符串。

你可能感兴趣的:(Djnago中缓存配置(redis配置案例))