zoukankan      html  css  js  c++  java
  • 0006 Django工程配置(03 缓存数据库redis配置)

      redis数据库是缓存数据库,本项目中主要用于存储session,和其它频繁使用的数据。缓存数据库的优点是数据在内存中,速度快,效率高。使用频率大,但更新次数不多的数据,都存在缓存数据库里。

    1 redis数据库的配置

      redis数据库可以设置若干数据库,没有上线,一般配置128个数据库,每个数据库用于处理一件事。这样可以根据key来获取数据,简单快捷。还可以为每个数据库设置别名,下面的设置,就有三个别名:

      default 表示默认数据库

      session 表示session存储,在Django中,session默认是存在关系数据库里的,为了把session存入redis数据库,需要重新指定session引擎,并明确django中使用session的别名。

      sms_codes 存储手机验证码,用于对比用户上传的验证码是否相同。

      session数据库,用于

    # Redis 数据库
    REDIS_SERVER = '' # 数据库IP或域名
    CACHES = {
        # 缓存view数据
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://" + REDIS_SERVER + ":6379/0",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "PASSWORD": "", # 数据库密码
            }
        },
        # 缓存登录session
        "session": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://" + REDIS_SERVER + ":6379/1",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "PASSWORD": "", # 数据库密码
            }
        },
        # 存放sms验证码
        "sms_codes": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://" + REDIS_SERVER + ":5379/2",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "PASSWORD": "", # 数据库密码
            }
        }
    }
    # 修改了Django的Session机制使用redis保存,且使用名为'session'的redis配置。
    # 此处修改Django的Session机制存储主要是为了给Admin站点使用。
    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    SESSION_CACHE_ALIAS = "session"
    

    3.2 redis数据库的存取

      在GeneralTools.py目录下创建一个redis连接函数,该函数主要功能是获取redis连接。

    VERSION = (4, 11, 0)
    __version__ = '.'.join(map(str, VERSION))
    
    
    def get_redis_connection(alias='default', write=True):
        """
        Helper used for obtaining a raw redis client.
        """
    
        from django.core.cache import caches
    
        cache = caches[alias]
    
        if not hasattr(cache, "client"):
            raise NotImplementedError("This backend does not support this feature")
    
        if not hasattr(cache.client, "get_client"):
            raise NotImplementedError("This backend does not support this feature")
    
        return cache.client.get_client(write)
    

    3.3 编写redis测试代码

      创建文件Applications/Examples/views/TestRedis.py,用来存储一个手机号。

    from rest_framework.views import APIView
    from coreapi import Field
    from coreschema import String
    from GeneralTools.CustomSchema import CustomSchema
    from GeneralTools.Redis import get_redis_connection
    from rest_framework.response import Response
    from rest_framework import status
    
    
    class TestSetRedis(APIView):
        schema = CustomSchema(
            manual_fields={
                'get': [
                    Field(name="mobile", required=True, location="query", schema=String(description='手机号')),
                ],
            }
        )
    
        @classmethod
        def get(cls, request):
            """
            【功能描述】用于把手机号存入redis数据库
            """
            mobile = request.query_params.get('mobile')
            redis_con = get_redis_connection('sms_codes')
            redis_con.setex('mobile', 600, mobile)
            return Response(data={'message': 'ok'}, status=status.HTTP_200_OK)
    
    
    class TestGetRedis(APIView):
        @classmethod
        def get(cls, request):
            """
            【功能描述】用于把手机号从redis数据库中取出来
            """
            redis_con = get_redis_connection('sms_codes')
            mobile = redis_con.get('mobile')
            return Response({'mobile': mobile}, status=status.HTTP_200_OK)

    3.4 检查数据

      登录redis服务器,查看2号数据库。

    redis-cli -h 172.17.0.11 -a cgl139 -p 5379
    select 2
    keys *
    get mobile

      此时可以看到

       表示数据已存入redis数据库中。

    3.5 进入接口文档,测试两个接口。先从TestSetRedis存入手机号,再从TestGetRedis取出手机号,能存进,能取出,表示数据库连接成功了!

  • 相关阅读:
    [国家集训队]数颜色 / 维护队列
    [SP3267]DQUERY
    扩展欧几里得算法详解(exgcd)
    [CTSC2018]混合果汁
    极角排序那些事
    向量的点乘与叉乘学习笔记
    [APIO2014]序列分割
    CF1148D-Dirty Deeds Done Dirt Cheap
    CF176E Archaeology(set用法提示)
    【网络流24题】最长不下降子序列问题
  • 原文地址:https://www.cnblogs.com/dorian/p/12404439.html
Copyright © 2011-2022 走看看