2010-05-26 49 views

回答

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 

而且從FAQ

什麼是上設置過期時間限制? (爲什麼會有30天的限制?)

您可以將過期時間設置爲將來最多30天。之後,memcached將其解釋爲日期,並在該日期後過期。這是一個簡單的(但不起眼的)機制。

-6

另一種簡單的技術是將生成的HTML寫入磁盤上的文件,並將其用作緩存。這並不難實現,並且它的工作原理很以及永不過期,是相當透明的基於文件的緩存等

這不是Django的方式,但它工作得很好。

+0

-1問題是關於memcache,這種方式會慢得多。 – 2012-03-14 16:49:14

+0

Viktor說了什麼! – Autobyte 2012-09-06 14:17:04

+1

取決於。比什麼慢?如果你正在生成一個非常複雜的頁面,這可能比從零開始重新生成要快,而且速度要足夠快。如果您生成一個簡單的頁面,這比從memcache中提供它慢。 – mlissner 2012-11-10 20:33:05

9

the docs

到期時間可以從0調整,意爲 「永不過期」,到30 天。高於30天解釋爲Unix時間戳任何時候 日期

因此,設置一鍵永不過期,超時設置爲0。

+2

這個bug是否有關? https://code.djangoproject.com/ticket/9595 – Alex 2013-06-04 01:51:59

5

支持通過設置timeout=None永不過期的緩存has been added in Django 1.6

+0

'Django 1.6.2','Memcached 1.4.17'。正在使用'timeout = 0',它就像我沒有緩存一樣。 'timeout = None'是未到期緩存的方式。 – Neara 2014-03-19 08:58:20

相關問題