Django配置Redis缓存服务

settings中配置,其中"default"只是默认缓存的名称,可以自定义
CACHES = {
        'default': {
            'BACKEND': 'django_redis.cache.RedisCache',
            'LOCATION': [
                'redis://120.77.222.217:6379/0',
            ],
            'KEY_PREFIX': '生成key的前缀',  # 这里随便写
            'OPTIONS': {
                'CLIENT_CLASS': 'django_redis.client.DefaultClient',
                'CONNECTION_POOL_KWARGS': {
                    'max_connections': 256,
                },
                'PASSWORD': '密码',
            }
        },
        "my_redis": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            'CONNECTION_POOL_KWARGS': {
                    'max_connections': 256,
                },
            'PASSWORD': '123456',
        }
     },
    }
# 使用引擎
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# 设置过期时间86400秒
SESSION_COOKIE_AGE = 86400
使用方法
第一种方法存储为String类型
from django.core.cache import cache  # cache是使用默认缓存的变量'default'

def login(self, request):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    token = uuid.uuid4().hex
    user = User.objects.get(username=request.data['username'])
    # cache只能存储为string类型的数据
    cache.set(token, user.id, timeout=1000)  # 1000秒
    res = {
    'token': token
    }
    return Response(res)
第二种方法指定使用的缓存变量
from django.core.cache import caches

def login(self, request):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    token = uuid.uuid4().hex
    user = User.objects.get(username=request.data['username'])
    # 指定使用的缓存配置,存储类型string
    caches['my_redis'].set(token, user.id, timeout=1000)  # 1000秒
    res = {
    'token': token
    }
    return Response(res)
第三种方法,获取redis连接对象
from django_redis import get_redis_connection 

def login(self, request):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    token = uuid.uuid4().hex
    user = User.objects.get(username=request.data['username'])
    redis = get_redis_connection(alias='my_redis')  # 获取redis连接对象,相当于redis_cli工具
    redis.set(token, user.id)  # 存储为String类型
    redis.hset('user_token', user.id, token)    # 存储为hash的类型
    res = {
    'token': token
    }
    return Response(res)
注意,存储类型不一样取值的时候也不一样,下面是使用的String类型
from rest_framework.authentication import BaseAuthentication
from django.core.cache import cache
from user.models import User
from utils.errors import ParamsException

class UserAuthentication(BaseAuthentication):

    def authenticate(self, request):
        path = request.path
        paths = ['/user/user/login/', '/user/user/register/']
        if path in paths:
            return None  # 注意return None
        token = request.GET.get('token')
        if not token:
            raise ParamsException({'code': 1007, 'msg': '无法访问!!'})
        user_id = cache.get(token)  # String类型
        if not user_id:
            raise ParamsException({'code': 1008, 'msg': '请先登录11'})
        user = User.objects.get(pk=user_id)
        return user, token  # 此处必须返回user, token
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值