2010-05-26 26 views

Trả lời

12
def _get_memcache_timeout(self, timeout): 
    """ 
    Memcached deals with long (> 30 days) timeouts in a special 
    way. Call this function to obtain a safe value for your timeout. 
    """ 
    timeout = timeout or self.default_timeout 
    if timeout > 2592000: # 60*60*24*30, 30 days 
     # See http://code.google.com/p/memcached/wiki/FAQ 
     # "You can set expire times up to 30 days in the future. After that 
     # memcached interprets it as a date, and will expire the item after 
     # said date. This is a simple (but obscure) mechanic." 
     # 
     # This means that we have to switch to absolute timestamps. 
     timeout += int(time.time()) 
    return timeout 

Và từ FAQ:

các giới hạn về thiết hết hạn thời gian là gì? (tại sao có giới hạn 30 ngày?)

Bạn có thể đặt thời gian hết hạn tối đa 30 ngày trong tương lai. Sau đó memcached giải thích nó như là một ngày, và sẽ hết hạn mục sau ngày nói trên. Đây là một cơ chế đơn giản (nhưng tối nghĩa).

-6

Một kỹ thuật đơn giản khác là viết HTML được tạo ra vào tệp trên đĩa và sử dụng làm bộ nhớ cache của bạn. Nó không khó để thực hiện, và nó hoạt động khá tốt như một bộ nhớ cache dựa trên tập tin mà KHÔNG BAO GIỜ hết hạn, khá rõ ràng, v.v.

Nó không phải là cách django, nhưng nó hoạt động tốt.

+0

-1 Câu hỏi về memcache, cách này sẽ chậm hơn nhiều. –

+0

Điều Viktor nói! – Autobyte

+1

Tùy thuộc. Chậm hơn cái gì? Nếu bạn đang tạo ra một trang rất phức tạp, điều này có thể nhanh hơn việc tái tạo nó từ đầu, và chưa đủ nhanh. Nếu bạn đang tạo một trang đơn giản, điều này sẽ chậm hơn so với việc phân phối nó từ memcache. – mlissner

9

Từ the docs:

Thời gian hết hạn có thể được thiết lập từ 0, có nghĩa là "không bao giờ hết hạn", tới 30 ngày. Bất cứ lúc nào cao hơn 30 ngày được xem như là một dấu thời gian unix ngày

Vì vậy, để thiết lập một chìa khóa để không bao giờ hết hạn, thiết lập thời gian chờ đến 0.

+2

Lỗi này có liên quan không? https://code.djangoproject.com/ticket/9595 – Alex

5

Hỗ trợ cho người không hết hạn bộ nhớ cache has been added in Django 1.6 bằng cách thiết lập timeout=None

+0

'Django 1.6.2',' Memcached 1.4.17'. Đã sử dụng 'timeout = 0' và nó giống như tôi không cache chút nào. 'timeout = None' là cách để đi cho bộ nhớ cache không hết hạn. – Neara

Các vấn đề liên quan