django使用redis缓存,使用多个缓存

如果不配置缓存,django默认使用local-memory缓存,就本地内存缓存。

用cache-page装饰器做一个视图缓存测试:

@cache_page(60*5)
def page_cache(request):
    time.sleep(5)
    return HttpResponse('cache_page')

浏览器第一次访问http://0.0.0.0:8000/polls/page_cache/,5秒后返回cache_page,300s内再次访问,会立刻返回结果。

cache-page用的local-memory默认缓存,所以redis中肯定是空的。

127.0.0.1:6379> keys *

(empty list or set)

修改默认缓存为redis:

CACHES = {
      "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

再次访问http://0.0.0.0:8000/polls/page_cache/后,查看redis

127.0.0.1:6379> keys *

1) ":1:views.decorators.cache.cache_header..1517a57fc33cb5df12628c4ef1a6cca5.en-us.UTC"

2) ":1:views.decorators.cache.cache_page..GET.1517a57fc33cb5df12628c4ef1a6cca5.d41d8cd98f00b204e9800998ecf8427e.en-us.UTC"

扫描二维码关注公众号,回复: 9417339 查看本文章

可以看出,redis中已经成功将页面缓存,有两个键。

配置多个缓存,一个默认本地内存缓存,一个redis缓存:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'OPTIONS': {
            'MAX_ENTRIES': 1000,
        }
    },
    "redis": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

修改视图:

装饰器中通过cache参数选择使用哪个缓存。

@cache_page(60*10)
#使用reids缓存
def page_cache(request,cache='redis'):
#使用默认的内存缓存
#def page_cache(request,cache='default'):
    time.sleep(5)
    return HttpResponse('cache_page')

如果使用默认缓存,redis为空,如果使用redis缓存,通过keys * 就能看到键值。

使用The low-level cache api

重写一个视图:

from django.core.cache import cache
from django.core.cache import caches
import random
def muti_cache(request):
    #res_key=cache.get('res_key')
    res_key=caches['redis'].get('res_key')
    #res_key=caches['default'].get('res_key')
    if not res_key:
        res_key = random.randint(0,100)
        cache.set('res_key','cache_key', 300)
    return HttpResponse(res_key)

导入的cache就是配置的默认缓存,caches相当于全部缓存集

cache=caches['default']

通过caches['redis']选择redis缓存

浏览器第一次访问http://0.0.0.0:8000/polls/muti_cache/,返回一个随机数

300秒内再次访问,就会返回缓存设置的cache_key

查看redis已经存入res_key-cache_key键值对:

127.0.0.1:6379> keys *

1) ":1:res_key"

参考:

django-redis文档:https://django-redis-chs.readthedocs.io/zh_CN/latest/

low-level-cache-api文档:https://docs.djangoproject.com/en/2.2/topics/cache/#the-low-level-cache-api

cache-page:https://docs.djangoproject.com/en/2.2/topics/cache/#django.views.decorators.cache.cache_page

多个缓存:https://stackoverflow.com/questions/5949271/how-to-use-2-different-cache-backends-in-django/40850500#40850500

发布了115 篇原创文章 · 获赞 34 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/u011519550/article/details/101645926