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