9
votes

À Django / Python, comment puis-je régler le Memcache sur un temps infini?

cache.set(key, value, 9999999)
But this is not infinite time...

0 commentaires

4 Réponses :


12
votes
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
And from the FAQ:
  What are the limits on setting expire time? (why is there a 30 day limit?)
  
  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.

0 commentaires

-6
votes

Une autre technique simple consiste à écrire le HTML généré dans un fichier sur le disque et à l'utiliser comme cache. Il n'est pas difficile de mettre en œuvre et cela fonctionne assez bien car un cache basé sur un fichier qui n'expire jamais, est tout à fait transparent, etc.

Ce n'est pas la façon Django, mais cela fonctionne bien.


2 commentaires

-1 question était sur Memcache, de cette façon, ce sera beaucoup plus lent.


Dépend. Plus lent que quoi? Si vous générez une page très compliquée, cela peut être plus rapide que la régénération de la gratter, et pourtant être assez rapide. Si vous générez une page simple, cela est plus lent que de le servir de Memcache.



10
votes

de The Docs :

Si la valeur de ces paramètres est nulle, les entrées de cache n'expirent pas.

notamment, c'est différent de la manière dont le temps d'expiration fonctionne dans la Memcache Protocole :

Les temps d'expiration peuvent être définis de 0, ce qui signifie "jamais expirer", à 30 jours. Chaque fois que 30 jours sont interprétés comme un horodatage UNIX Date

Donc, pour définir une clé pour ne jamais expirer, définissez le délai d'expiration sur Aucun si vous utilisez l'abstraction de cache de Django, ou 0 si vous utilisez memcache plus directement.


2 commentaires

Lorsque je définis le cache sur 0, il ne semble pas se cacher du tout.


Définition du délai d'attente à 0 Causes Les touches doivent expirer immédiatement (efficacement "ne pas cacher" du tout). Vous pouvez définir le délai d'expiration à aucun de sorte que, par défaut, les clés de cache n'expirent jamais. Voir docs.djangoproject.com/fr/3.0/ Réf / Paramètres / ... pour plus de détails.



8
votes

Prise en charge de la cache non expirante a été ajouté à Django 1.6 en définissant le délai d'attente = Aucune


1 commentaires

Django 1.6.2 , Memcached 1.4.17 . Utilisait timeout = 0 et il était identique que si je ne me cache pas du tout. timeout = Aucune est le moyen d'aller pour le cache non expirant.