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