2017-05-01 16 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

のドキュメントから

は、オブジェクトの「アイデンティティ」を返し

。これは、オブジェクト の整数であり、このオブジェクトに対して一意で一定であることが保証されています(有効期間中に の整数)。生涯が重複しない2つのオブジェクトは、同じid()値を持つ です。

あなたのコレクションのキーの一意性を保証し、一様な分布を持つ他のアプローチを試してください。 実装では、インスタンス識別データからハッシュコード(md5またはsha1)を生成します。

関連する問題