zoukankan      html  css  js  c++  java
  • django使用redis

    django_redis

    下载

    >: pip install django-redis

    说明

    django连接django_redis后会顶替原memcache数据库
    django使用django_redis缓存数据库是通过内存管理来操作,所以需要导入django的内存管理cache

    补充:
    原生redis不能存储drf序列化的结果,因为其结果不是字符串类型,所以使用django_redis
    可以将django_redis理解为是redis的辅助工具,可以将drf序列化后的结果存入redis库中

     补充知识: django内存管理

    from django.core.cache import cache
    
    # 内存中设置值
    cache.set(key, value, exp)
    # 取值
    cache.get(key)

    注:默认操作的是django的memcache内存数据库

     使用

    配置: settings/dev.py
    # 缓存配置 - redis存储:依赖 django-redis
    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/7",  # 连入指定数据库 这里连接的是7号数据库
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "CONNECTION_POOL_KWARGS": {"max_connections": 100}  # 最大连接数
            }
        }
    }

     案例:

    import os, django
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev")
    django.setup()
    
    
    from django.core.cache import cache
    from user.models import User
    from rest_framework.serializers import ModelSerializer
    
    class UserModelSerializer(ModelSerializer):
        class Meta:
            model = User
            fields = ['username', 'password']
    # 获取用户对象
    user_obj = User.objects.all().first()
    # 序列化
    user_data = UserModelSerializer(user_obj).data
    print(user_data)
    # {'username': 'admin', 'password': 'pbkdf2_sha256$0oIWjJbH98M$tbYJl1ja25oSXOxv8WW8I8fxsb3/tZgbtgcDhUbTyuQ='}
    print(type(user_data))  # <class 'rest_framework.utils.serializer_helpers.ReturnDict'>
    # 存入redis内存数据库
    cache.set(user_obj.username, user_data , 10)  # 参数: key, value, 过期时间/秒
    # 取出
    res = cache.get(user_obj.username) print(res) # {'username': 'admin', 'password': 'pbkdf2_sha256$IWjJbH98M$tbYJl1ja25oSXOxv8WW8I8fxsb3/tZgbtgcDhUbTyuQ='} print(type(res)) # <class 'dict'>

     缓存接口

    当接口的访问量大,且数据比较固定,建议建立缓存接口
    
    利用redis内存数据库,将数据存入带redis中,有缓存时走缓存,每缓存时走数据,并在redis中存一份.

    案例:

    from rest_framework.generics import ListAPIView
    from . import models, serializers
    from settings.const import BANNER_COUNT
    
    # 访问量大,且数据较固定的接口,建议建立接口缓存
    from django.core.cache import cache
    from rest_framework.response import Response
    class BannerListAPIView(ListAPIView):
        queryset = models.Banner.objects.filter(is_delete=False, is_show=True).order_by('-orders')[:BANNER_COUNT]
        serializer_class = serializers.BannerModelSerializer
    
        # 缓存有,走缓存,缓存没有走数据库
        def list(self, request, *args, **kwargs):
            banner_data = cache.get('banner_list')
            if not banner_data:
                print('走数据库')
                response = super().list(request, *args, **kwargs)
                banner_data = response.data
                # 建立缓存,不建议设置缓存过期时间,用celery等框架后台异步更新缓存即可
                cache.set('banner_list', banner_data)
            return Response(banner_data)
  • 相关阅读:
    java读取ldif文件并创建新的节点
    AngularJS的基本概念和用法
    前端开发环境需要的工具
    解决:使用ajax验证登录信息返回前端页面时,当前整个页面刷新。
    js中switch语句不执行
    使用html5中required属性
    H-ui.admin v3.1学习之路(一):导航栏信息无法在内容区显示
    解决:@Auarowired为null
    scrapy框架整理
    django项目的部署
  • 原文地址:https://www.cnblogs.com/waller/p/11767785.html
Copyright © 2011-2022 走看看