Différences entre versions de « Java memcached »
(8 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 15 : | Ligne 15 : | ||
</pre> | </pre> | ||
Il faut maintenant démarrer le serveur ''Memcache'' et l'enregistrer dans le chargeur de démarrage : | Il faut maintenant démarrer le serveur ''Memcache'' et l'enregistrer dans le chargeur de démarrage : | ||
+ | * CentOS 6 : | ||
<pre> | <pre> | ||
# service memcached start | # service memcached start | ||
# chkconfig memcached on | # chkconfig memcached on | ||
+ | </pre> | ||
+ | * CentOS 7+ : | ||
+ | <pre> | ||
+ | # systemctl start memcached.service | ||
+ | # systemctl enable memcached.service | ||
</pre> | </pre> | ||
On vérifie le bon fonctionnement: | On vérifie le bon fonctionnement: | ||
Ligne 30 : | Ligne 36 : | ||
# service iptables save | # service iptables save | ||
</pre> | </pre> | ||
+ | |||
== Librairies Java == | == Librairies Java == | ||
Le ''JAR'' à récupérer s'appelle ''spymemcached'' et se trouve ici : https://code.google.com/p/spymemcached/downloads/list | Le ''JAR'' à récupérer s'appelle ''spymemcached'' et se trouve ici : https://code.google.com/p/spymemcached/downloads/list | ||
Intégrez le au ''Build Path'' de votre projet avant de continuer. | Intégrez le au ''Build Path'' de votre projet avant de continuer. | ||
+ | |||
+ | {|align=center | ||
+ | |- | ||
+ | ||[[Fichier:menu_add_jar_to_buildpath_memcache.png]]||<span style="font-size:60px">→</span>||[[Fichier:Add memcache client jar.png]] | ||
+ | |} | ||
=Utilisation= | =Utilisation= | ||
== Connexion == | == Connexion == | ||
Tout d'abord, il faut créer la connexion au serveur ''memcache'', dans cette exemple, le serveur possède l'adresse ''IP'' 192.168.100.110 : | Tout d'abord, il faut créer la connexion au serveur ''memcache'', dans cette exemple, le serveur possède l'adresse ''IP'' 192.168.100.110 : | ||
− | <source lang=" | + | <source lang="java" style="border:1px solid black;font-size:130%"> |
− | + | package fr.tala; | |
− | + | ||
+ | import java.io.IOException; | ||
+ | import java.net.InetSocketAddress; | ||
+ | |||
+ | import net.spy.memcached.MemcachedClient; | ||
+ | |||
+ | public class CacheTest { | ||
+ | public static void main(String args[]){ | ||
+ | try { | ||
+ | MemcachedClient mc = new MemcachedClient(new InetSocketAddress("192.168.100.110", 11211)); | ||
+ | } catch (IOException e) { | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
</source> | </source> | ||
== Getter / Setter == | == Getter / Setter == | ||
On peut ensuite ajouter une variable identifiée grâce à une clé (''$key'') et une valeur (''$value'') : | On peut ensuite ajouter une variable identifiée grâce à une clé (''$key'') et une valeur (''$value'') : | ||
− | <source lang=" | + | <source lang="java" style="border:1px solid black;font-size:130%"> |
− | + | String key = "compteur"; | |
− | + | mc.set(key, 0, "0"); | |
− | |||
</source> | </source> | ||
+ | Le chiffre entre la clé et la valeur permet de paramétrer la durée de vie de la variable sur le serveur ''Memcache''. | ||
+ | |||
On peut maintenant la récupérer grâce à sa ''key'': | On peut maintenant la récupérer grâce à sa ''key'': | ||
− | <source lang=" | + | <source lang="java" style="border:1px solid black;font-size:130%"> |
− | + | mc.get(key); | |
</source> | </source> | ||
== Incrément / décrément == | == Incrément / décrément == | ||
On peut utiliser, si la variable est un entier, une méthode qui permettra d'incrémenter ou de décrémenter directement sa valeur sans avoir à la récupérer : | On peut utiliser, si la variable est un entier, une méthode qui permettra d'incrémenter ou de décrémenter directement sa valeur sans avoir à la récupérer : | ||
− | <source lang=" | + | <source lang="java" style="border:1px solid black;font-size:130%"> |
# incrémente de 1 | # incrémente de 1 | ||
− | + | mc.incr(key, 1); | |
# incrémente de 2 | # incrémente de 2 | ||
− | + | mc.incr(key, 2); | |
# décrémente de 1 | # décrémente de 1 | ||
− | + | mc.decr(key, 1); | |
# décrémente de 2 | # décrémente de 2 | ||
− | + | mc.decr(key, 2); | |
</source> | </source> | ||
+ | Attention : en Java, vous devez créer la variables comme indiqué dans la partie [[ Java_memcached#Getter_.2F_Setter | Getter / Setter]]. Si vous typez une variable en ''int'' avant de l'ajouter avec ''set'', memcache sera incapable de l'incrémenter. Étrange ? Le bug est détaillé [http://stackoverflow.com/questions/5928964/spymemcached-get-and-incr-methods-give-wholly-different-results ici] |
Version actuelle datée du 11 février 2018 à 18:57
Introduction
Memcached est un système d'usage général servant à gérer la mémoire cache distribuée. Il est souvent utilisé pour augmenter la vitesse de réponse des sites web créés à partir de bases de données. Il gère les données et les objets en RAM de façon à réduire le nombre de fois qu'une même donnée stockée dans un périphérique externe est lue. Il tourne sous Unix, Windows et MacOS et est distribué selon les termes d'une licence libre dite permissive1.
Memcached a été initialement mis au point par Danga Interactive pour LiveJournal. En 2010, il est utilisé par d'autres sites, plusieurs très fréquentés, tels que YouTube, Reddit, Zynga, Facebook et Twitter.
On peut avoir besoin de Memcache lorsque l'on à besoin de se substituer à la base de données. En effet, il peut être intéressant de faire ce que l'on appel un Mock qui implémente la même interface que le DAO mais qui stocke les objets en mémoire.
Installation
Pour utiliser Memchache, il faut l'installer sur un serveur et pour pouvoir l'utiliser il faut des librairies Java. Vous pouvez tout faire sur la même machine, ou bien déporter le serveur sur une autre machine.
Memcache
# yum -y install memcached
Il faut maintenant démarrer le serveur Memcache et l'enregistrer dans le chargeur de démarrage :
- CentOS 6 :
# service memcached start # chkconfig memcached on
- CentOS 7+ :
# systemctl start memcached.service # systemctl enable memcached.service
On vérifie le bon fonctionnement:
# netstat -atnp | grep memcached tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 1466/memcached tcp 0 0 :::11211 :::* LISTEN 1466/memcached
On n'oublie pas d'ouvrir le pare-feu:
# iptables -I INPUT 2 -p tcp --dport 11211 -j ACCEPT # service iptables save
Librairies Java
Le JAR à récupérer s'appelle spymemcached et se trouve ici : https://code.google.com/p/spymemcached/downloads/list
Intégrez le au Build Path de votre projet avant de continuer.
→ |
Utilisation
Connexion
Tout d'abord, il faut créer la connexion au serveur memcache, dans cette exemple, le serveur possède l'adresse IP 192.168.100.110 :
package fr.tala;
import java.io.IOException;
import java.net.InetSocketAddress;
import net.spy.memcached.MemcachedClient;
public class CacheTest {
public static void main(String args[]){
try {
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("192.168.100.110", 11211));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Getter / Setter
On peut ensuite ajouter une variable identifiée grâce à une clé ($key) et une valeur ($value) :
String key = "compteur";
mc.set(key, 0, "0");
Le chiffre entre la clé et la valeur permet de paramétrer la durée de vie de la variable sur le serveur Memcache.
On peut maintenant la récupérer grâce à sa key:
mc.get(key);
Incrément / décrément
On peut utiliser, si la variable est un entier, une méthode qui permettra d'incrémenter ou de décrémenter directement sa valeur sans avoir à la récupérer :
# incrémente de 1
mc.incr(key, 1);
# incrémente de 2
mc.incr(key, 2);
# décrémente de 1
mc.decr(key, 1);
# décrémente de 2
mc.decr(key, 2);
Attention : en Java, vous devez créer la variables comme indiqué dans la partie Getter / Setter. Si vous typez une variable en int avant de l'ajouter avec set, memcache sera incapable de l'incrémenter. Étrange ? Le bug est détaillé ici