2017-05-01 1 views
0

다음 모델을 캐싱하고 각 질문에 대한 단축 링크를 캐싱하고 싶습니다.캐시 키를 생성하는 방법

class Question(models.Model): 
    question_text = models.CharField('text', max_length=200) 
    pub_date = models.DateTimeField('publication date', default=timezone.now) 
    allow_multiple_choices = models.BooleanField(default=False) 


class Choice(models.Model): 
    question = models.ForeignKey(Question, on_delete=models.CASCADE) 
    choice_text = models.CharField('text', max_length=200) 
    votes = models.IntegerField('votes', default=0) 

    def __str__(self): 
     return self.choice_text 

키는 어떻게 생성해야합니까? 이 정도면 충분합니까?

cache.set('question' + question.id, question) 
cache.set('shortened' + question.id, shortened) 

답변

1

이 작업을 수행해야합니다. 그러나 생성 된 인스턴스의 범위에 대해서는 확신 할 수 없습니다. 이들이 전역적일 경우 우리는 중복되지 않는 키를 보장합니다. id

의 문서에서

은 객체의 "정체성"을 반환

. 이 정수 (또는 정수)는이 객체에 대해 고유하고 상수가되도록 보장됩니다.이 객체의 수명 기간 동안 입니다. 수명이 중복되지 않는 두 객체는 ​​ 이 동일한 id() 값을 가질 수 있습니다.

다른 접근 방식을 시도해야합니다. 컬렉션의 고유성을 보장하고 균일 한 배포를 보장해야합니다. 구현시 인스턴스 식별 데이터에서 해시 코드 (md5 또는 sha1)를 생성합니다.

관련 문제