https://docs.djangoproject.com/zh-hans/2.0/ref/utils/#module-django.utils.functional
 Say:
The cached result will persist as long as the instance does, so if the
instance is passed around and the function subsequently invoked, the cached
result will be returned.

https://docs.djangoproject.com/zh-hans/2.0/topics/cache/ Say:
 You can cache any Python object that can be pickled safely: strings,
dictionaries, lists of model objects, and so forth.

Then I use cache API to cache the model instance, "cached result" of the
instance should be cached together.

   - What is the problem?


赖信桃 <[email protected]> 于2018年6月28日周四 上午11:44写道:

> Django's cached framework and @cached_property are two different things,
> though both has "cached" it doesn't mean that they share memory....
>
> https://docs.djangoproject.com/zh-hans/2.0/topics/cache/
>
> https://docs.djangoproject.com/zh-hans/2.0/ref/utils/#module-django.utils.functional
>
> Read the docs.
>
> 林挺滨 <[email protected]>于2018年6月28日周四 上午10:31写道:
>
>> class Log(models.Model):
>>     type = models.CharField(max_length=200, unique=True)
>>     column = SortedManyToManyField(Column, blank=True)
>>     min_column_cnt = models.IntegerField(blank=True, default=0, help_text='0 
>> equal NULL')
>>
>>     @cached_property
>>     def column_list_name(self):
>>         return [col.name for col in self.column.all()]
>>
>>     @cached_property
>>     def column_len(self):
>>         return len(self.column.all())
>>
>>     @cached_property
>>     def get_all_column_checker(self):
>>         column_ids = [c.id for c in self.column.all()]
>>         return 
>> ColumnChecker.objects.select_related('column').filter(column_id__in=column_ids)
>>
>>
>> def get_log_attr(log_type):
>>     global log_attr_dict, log_attr_last_update_ts
>>     if (datetime.now() - log_attr_last_update_ts).total_seconds() < 
>> update_log_attr_interval and \
>>             log_type in log_attr_dict:
>>         return log_attr_dict[log_type]
>>     log_attr_dict[log_type] = 
>> Log.objects.prefetch_related('column').get(type=log_type)
>>     log_attr_last_update_ts = datetime.now()
>>     return log_attr_dict[log_type]
>>
>>
>> Now I use module global var "log_attr_dict" to cache the Log instance,
>> @cached_property of the instance is work.
>>
>> def get_log_attr(log_type):
>>     log_attr = cache.get(log_type)
>>     if not log_attr:
>>         log_attr = Log.objects.prefetch_related('column').get(type=log_type)
>>         cache.set(log_type, log_attr, update_log_attr_interval)
>>     return log_attr
>>
>>
>> But if I use cache api to cache the Log instance, @cache_property of the
>> instance isn't work. (I use the local memory cache.)
>>
>> 赖信桃 <[email protected]> 于2018年6月27日周三 下午9:07写道:
>>
>>> Show me your code snippet.
>>>
>>> 林挺滨 <[email protected]>于2018年6月27日周三 下午8:44写道:
>>>
>>>> When I use cache framework api to cache a model instance,  @cached_property
>>>> of the instance doesn't work. Why?
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Django users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at https://groups.google.com/group/django-users.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/django-users/5b27fa47-c712-460f-a421-1eb1d41c764e%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/django-users/5b27fa47-c712-460f-a421-1eb1d41c764e%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/django-users.
>>>
>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/django-users/CAMv51WQMrueCfWoBV3a0Djr7QhL3mqXcg_Ak5yNt75%3DP2Vy4WA%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/django-users/CAMv51WQMrueCfWoBV3a0Djr7QhL3mqXcg_Ak5yNt75%3DP2Vy4WA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>
>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>> --
>> 祝您  身体健康
>>          工作愉快!
>>
>> 林挺滨
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/django-users/CAGdZMg8v2mp%3DOiO3coBFypGZ5O%2B_FLC_5cfnK94CRXax0OHRYw%40mail.gmail.com
>> <https://groups.google.com/d/msgid/django-users/CAGdZMg8v2mp%3DOiO3coBFypGZ5O%2B_FLC_5cfnK94CRXax0OHRYw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CAMv51WTfACztXVaoCv6GgdJBEBh8KKhdfZXHQRYw4d%2BBC_2rOQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-users/CAMv51WTfACztXVaoCv6GgdJBEBh8KKhdfZXHQRYw4d%2BBC_2rOQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>


-- 
祝您  身体健康
         工作愉快!

林挺滨

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAGdZMg83qVXpLSCPSkDvvJt%3DmEc%2BRLdjRTxyXdwNjdv4Fy%3DpMg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to