From 11abeebbeeb4124f7e48207252a9c3c3c18567a3 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Sat, 10 Oct 2015 19:57:11 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E8=8E=B7=E5=8F=96=20redis=20?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest/views.py | 9 +++++---- contest_submission/views.py | 5 ++--- utils/cache.py | 9 +++++++++ 3 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 utils/cache.py diff --git a/contest/views.py b/contest/views.py index c118855..cdf9397 100644 --- a/contest/views.py +++ b/contest/views.py @@ -18,6 +18,7 @@ from utils.shortcuts import (serializer_invalid_response, error_response, from account.models import SUPER_ADMIN, User from account.decorators import login_required from group.models import Group +from utils.cache import get_cache_redis from .models import (Contest, ContestProblem, ContestSubmission, CONTEST_ENDED, CONTEST_NOT_START, CONTEST_UNDERWAY, ContestRank) from .models import GROUP_CONTEST, PUBLIC_CONTEST, PASSWORD_PROTECTED_CONTEST @@ -26,8 +27,6 @@ from .serializers import (CreateContestSerializer, ContestSerializer, EditContes CreateContestProblemSerializer, ContestProblemSerializer, ContestPasswordVerifySerializer, EditContestProblemSerializer) -from oj.settings import REDIS_CACHE -import redis class ContestAdminAPIView(APIView): @@ -119,7 +118,7 @@ class ContestAdminAPIView(APIView): # 之前是封榜,现在要开放,需要清除缓存 if contest.real_time_rank == False and data["real_time_rank"] == True: - r = redis.Redis(host=settings.REDIS_CACHE["host"], port=settings.REDIS_CACHE["port"], db=settings.REDIS_CACHE["db"]) + r = get_cache_redis() cache_key = str(contest.id) + "_rank_cache" r.delete(cache_key) @@ -392,9 +391,11 @@ def contest_list_page(request, page=1): def contest_rank_page(request, contest_id): contest = Contest.objects.get(id=contest_id) contest_problems = ContestProblem.objects.filter(contest=contest).order_by("sort_index") - r = redis.Redis(host=settings.REDIS_CACHE["host"], port=settings.REDIS_CACHE["port"], db=settings.REDIS_CACHE["db"]) + + r = get_cache_redis() cache_key = str(contest_id) + "_rank_cache" rank = r.get(cache_key) + if not rank: rank = ContestRank.objects.filter(contest_id=contest_id).\ select_related("user").\ diff --git a/contest_submission/views.py b/contest_submission/views.py index cdda878..d47302f 100644 --- a/contest_submission/views.py +++ b/contest_submission/views.py @@ -9,16 +9,15 @@ from django.utils import timezone from rest_framework.views import APIView from judge.judger_controller.tasks import judge -from judge.judger_controller.settings import redis_config from account.decorators import login_required from account.models import SUPER_ADMIN from contest.decorators import check_user_contest_permission -from problem.models import Problem from contest.models import Contest, ContestProblem from utils.shortcuts import serializer_invalid_response, error_response, success_response, error_page, paginate +from utils.cache import get_cache_redis from submission.models import Submission from .serializers import CreateContestSubmissionSerializer from submission.serializers import SubmissionSerializer @@ -57,7 +56,7 @@ class ContestSubmissionAPIView(APIView): request.user.problems_status = problems_status request.user.save() # 增加redis 中判题队列长度的计数器 - r = redis.Redis(host=redis_config["host"], port=redis_config["port"], db=redis_config["db"]) + r = get_cache_redis() r.incr("judge_queue_length") return success_response({"submission_id": submission.id}) else: diff --git a/utils/cache.py b/utils/cache.py new file mode 100644 index 0000000..89eff34 --- /dev/null +++ b/utils/cache.py @@ -0,0 +1,9 @@ +# coding=utf-8 +import redis +from django.conf import settings + + +def get_cache_redis(): + return redis.Redis(host=settings.REDIS_CACHE["host"], + port=settings.REDIS_CACHE["port"], + db=settings.REDIS_CACHE["db"]) \ No newline at end of file