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取出手机号,能存进,能取出,表示数据库连接成功了!

原文地址:https://www.cnblogs.com/dorian/p/12404439.html