2. Memcached : ???
Développé par Brad Fitzpatrick (LiveJournal) in 2003
Open Source (memcached.org / BSD License)
Massivement utilisé sur les sites à fort trafic
(Youtube, Facebook, Flickr, Wikipedia, Twitter, etc.)
4. Système de cache distribué permettant de stocker des données (clé/valeur) sur
la mémoire vive (RAM)
Possibilité de définir une durée de validité
I/O non bloquant (asynchrone)
Principalement utilisé pour :
des données volatiles (non persistantes)
soulager les traitements en Base de Données
Partage de données
Memcached
5. Pourquoi
Utilisé dans le cadre d’une donnée temporaire
Tout est traité en mémoire
Excellentes performances en lecture et écriture
Distribution du cache sur « n » serveurs Memcached (grâce à l’API)
Memcached
6. Quand
Les requêtes en lecture sont largement majoritaires
Limites d’optimisation du Query Cache de la BDD
Pour quel type d’utilisation ?
Stockage de sessions utilisateurs
Statistiques et données diverses et variées (nombre de users, etc.)
Résultat de requêtes SQL
Données à partager
Données est < 1 Mo
Clé 250 caractères au maximum
Eviter la pénalité réseau entre le client et Memcached
Memcached
7. N’est pas un « Storage Engine »
mais un système de cache
!!!
Memcached
8. Le service
Accepte des connexions en lecture / écriture en TCP
Ecoute sur un port TCP spécifique
Possibilité de fixer l’allocation de mémoire réservée
Stock la donnée en RAM
Utilise libevent
Algorithme de cache LRU (Least Recently Used) sur les Slab Class
=> Remplace le cache utilisé le moins récemment
Memcached
9. Distribution
Le pool de serveurs est géré par le client
+ La notion de failover
=> Chaque serveur est indépendant, et n’a pas connaissance des
autres.
La donnée peut être lue sur « n » serveurs
La donnée est écrite / stockée sur 1 serveur
Memcached
10. Fonctionnalités Memcached Redis
Données persistantes NON OUI
Réplication en natif NON OUI
Master / Slave (Sentinel)
Authentification NON OUI
Orienté performance OUI
+
OUI
-
Structures de données + ++
(hashes, lists, sets, sorted sets)
Memcached vs Redis
11. Objectif
L’objectif est de soulager la BDD
La BDD est sollicitée que si le cache n’est
pas présent dans Memcached
Memcached
13. Utilisation
• Modification
replace key_test_set 0 3600 3
111
STORED
get key_test_set
VALUE key_test_set 0 3
111
END
• Suppression
delete key_test_set
DELETED
• Ecriture :
Set « key » « flags» « expiration » « taille_bytes »
set key_test_set 0 3600 5
11111
STORED
• Lecture : get « key »
get key_test_set
VALUE key_test_set 0 5
11111
END
Memcached
14. • 1 caractère = 1 byte
set key_test_set 0 3600 5
11111
STORED
=> 5 bytes
set key_test_set 0 3600 5
11111
STORED
stats items
STAT items:1:number 1
STAT items:1:age 3558
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
END
stats cachedump 1 1
ITEM key_test_set [5 b; 1447428938 s]
END
StockageMemcached
15. replace key_test_set 0 3600 3
000
STORED
stats items
STAT items:1:number 1
STAT items:1:age 3726
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
END
stats cachedump 1 1
ITEM key_test_set [3 b; 1447429106 s]
END
set key_test_set 0 3600 5
11111
STORED
stats items
STAT items:1:number 1
STAT items:1:age 3558
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
END
stats cachedump 1 1
ITEM key_test_set [5 b; 1447428938 s]
END
StockageMemcached