architecture – Sam & Max http://sametmax.com Du code, du cul Wed, 30 Oct 2019 15:34:04 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.7 32490438 Comment Redis et Memcache font expirer leurs données http://sametmax.com/comment-redis-et-memcache-font-expirer-leurs-donnees/ http://sametmax.com/comment-redis-et-memcache-font-expirer-leurs-donnees/#comments Thu, 28 Feb 2013 12:04:02 +0000 http://sametmax.com/?p=5184 Redis et Memcache ont des opérations d’insertion de complexité O(1) (très rapide). Malgré ça ils proposent tout deux l’expiration de clé.

Et je me suis demandé : comment ils font ? Comment je pourrais fais ça si je devais le coder en Python ?

En effet, rechercher une clé expirée prend du temps. J’ai pensé à utiliser heapq, mais l’insertion serait en 0(log(n)) (temps dépendant du nombre d’items), donc rapide, mais loin des perfs de Redis et Memcache.

Même si on garde à l’esprit qu’ils sont codés en C, et donc plus rapide, ça m’a turlupiné. Comment ils font ces cons ?

La réponse est surprenant : ils font la même chose que 0bin !

Memcache :

Memcache doesn’t evict keys when their expiration time expires, as doing so isn’t possible while still guaranteeing O(1) operation times. Instead expiration is more of a way to say how long until a key should be considered stale. When a GET is performed, Memcache checks if the key’s expiration time is still valid before returning it.

Redis :

Redis keys are expired in two ways: a passive way, and an active way. A key is actively expired simply when some client tries to access it, and the key is found to be timed out. Of course this is not enough as there are expired keys that will never be accessed again. This keys should be expired anyway, so periodically Redis test a few keys at random among keys with an expire set. All the keys that are already expired are deleted from the keyspace.

Memcache et Redis ne cherchent donc pas les clés, ils vérifient l’expiration à l’accès de la clé et suppriment le contenu si c’est dépassé.

Redis va plus loin en régulièrement prenant des clés au hasard et en checkant leur date d’expiration.

Gif de Tealc' buvant un café très chaud

Comment il fait ? Ah bah il fait pas.

]]>
http://sametmax.com/comment-redis-et-memcache-font-expirer-leurs-donnees/feed/ 12 5184