Pour plus d'informations sur la construction de cluster Redis, veuillez vous référer à mon autre article Construction de cluster Redis et utilisation simple
Qu'est-ce que Redis et que peut-il faire
Redis est un serveur de structure de données en mémoire open source (sous licence BSD) qui peut être utilisé comme courtier de base de données, de cache et de file d'attente de messages. Il prend en charge les chaînes, les tables de hachage, les listes, les ensembles, les ensembles ordonnés, les bitmaps, les hyperloglogs et d'autres types de données. Réplication intégrée, scripts Lua, expulsion LRU, transactions et différents niveaux de fonctions de persistance du disque, tout en offrant une haute disponibilité via Redis Sentinel et un partitionnement automatique via Redis Cluster. (Extrait du site officiel de Redis)
En tant que base de données en mémoire, Redis est encore principalement utilisé comme cache dans les systèmes Web Internet modernes. Les systèmes Web Internet à grande échelle ont des exigences de performances élevées, et l'ajout de la mise en cache des données entre le front-end et la couche de données est devenu l'un des moyens essentiels. Les deux technologies actuellement populaires sont Redis et Memcached. Ce n’est pas le sujet de cet article. Cet article parle principalement de la façon dont Java Web exploite Redis et le cluster Redis.
Fonctionnement général du programme Java Redis
Redis fournit des clients dans plusieurs langues, la plus populaire en Java est Jedis. Visitez pour voir le code source et comment l'utiliser. Actuellement, la dernière version de Jedis est la 2.9.0. Qu'il s'agisse d'une machine autonome ou d'un cluster, Jedis propose des instructions très détaillées et des exemples de codes. Voici seulement une brève explication. Si vous utilisez Maven pour la gestion des packages, vous devez référencer le package jedis. Cet exemple utilise la dernière version 2.9.0, comme suit :
redis.clients jedis 2.9.0 操作 Redis 单机 import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig; /** * Created by fengdezitai on 2016/10/9. */public class JedisClient { private static final String host= "192.168.31.121"; private static final JedisClient jedisClient = new JedisClient(); private Jedis jedis = null; /** * 私有构造函数 */ private JedisClient(){} public static JedisClient getInstance(){ return jedisClient; } private JedisPoolConfig getPoolConfig(){ JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(10); jedisPoolConfig.setMaxTotal(100); jedisPoolConfig.setMaxWaitMillis(3000); return jedisPoolConfig; } /** * 添加 * @param key * @param value * @return * @throws Exception */ public Boolean add(String key,String value) throws Exception{ JedisPool pool = new JedisPool(getPoolConfig(),host); Jedis jedis = null; try { jedis = pool.getResource(); if(jedis.exists(key)){ throw new Exception(String.format("key (%s) 已存在 ",key)); } jedis.set(key,value); }catch (Exception e){ throw e; } finally { if(jedis!=null){ jedis.close(); } } pool.destroy(); return true; } /** * 获取值 * @param key * @return * @throws Exception */ public String get(String key) throws Exception{ JedisPool pool = new JedisPool(getPoolConfig(),host); Jedis jedis = null; String result = ""; try { jedis = pool.getResource(); result = jedis.get(key); }catch (Exception e){ throw e; } finally { if(jedis!=null){ jedis.close(); } } pool.destroy(); return result; } public static void main(String[] args) { JedisClient jedisClient = JedisClient.getInstance(); try { /*Boolean result = jedisClient.add("hello", "redis1"); if(result){ System.out.println("success"); }*/ System.out.println(jedisClient.get("hello")); }catch (Exception e){ e.printStackTrace(); } }}
Operation redis cluster
import redis.clients.jedis.*; import java.util.HashSet; import java.util.Set; /** * Created by fengdezitai on 2016/10/13. */ public class JedisClusterClient { private static int count = 0; private static final JedisClusterClient redisClusterClient = new JedisClusterClient(); /** * 私有构造函数 */ private JedisClusterClient() {} public static JedisClusterClient getInstance() { return redisClusterClient; } private JedisPoolConfig getPoolConfig(){ JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(1000); config.setMaxIdle(100); config.setTestOnBorrow(true); return config; } public void SaveRedisCluster() { Set jedisClusterNodes = new HashSet(); jedisClusterNodes.add(new HostAndPort("192.168.31.245", 7000)); jedisClusterNodes.add(new HostAndPort("192.168.31.245", 7001)); jedisClusterNodes.add(new HostAndPort("192.168.31.245", 7002)); jedisClusterNodes.add(new HostAndPort("192.168.31.210", 7003)); jedisClusterNodes.add(new HostAndPort("192.168.31.210", 7004)); jedisClusterNodes.add(new HostAndPort("192.168.31.210", 7005)); JedisCluster jc = new JedisCluster(jedisClusterNodes,getPoolConfig()); jc.set("cluster", "this is a redis cluster"); String result = jc.get("cluster"); System.out.println(result); } public static void main(String[] args) { JedisClusterClient jedisClusterClient = JedisClusterClient.getInstance(); jedisClusterClient.SaveRedisCluster(); } }
. Spring mvc Operating Redis
Pour faire fonctionner Redis dans Spring mvc, vous devez bien sûr d'abord configurer le framework Spring mvc. Ce qui suit suppose que l'environnement Spring mvc a été configuré. Dans cet exemple, la version Spring est la version 4.3.2. La référence maven sur Spring est la suivante :
4.3.2.RELEASE org.springframework spring-core ${spring.version} commons-logging commons-logging org.springframework spring-web ${spring.version} org.springframework spring-oxm ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-webmvc ${spring.version} commons-logging commons-logging org.springframework spring-aop ${spring.version} org.springframework spring-context-support ${spring.version} org.springframework spring-test ${spring.version}
Faire fonctionner Redis de manière autonome
Utiliser uniquement Jedis pour implémenter l'injection (différent de la référence suivante spring-data-redis)
Le code JedisClient précédent peut être référencé. Il vous suffit d'implémenter un service pour accéder à Redis, et il peut être intégré à Spring mvc. Le code du service est le suivant :
import org.springframework.stereotype.Service; import util.JedisClient; /** * Created by fengdezitai on 2016/10/9. */ @Service public class RedisService { public String get(String key) throws Exception{ JedisClient jedisClient = JedisClient.getInstance(); //上面实现的JedisClient String result = ""; try { result = jedisClient.get("hello"); }catch (Exception e){ throw e; } return result; } }
Le contrôleur est implémenté comme suit :
@Controller @RequestMapping(value = "redisAllInOne") public class RedisAllInOneController { @Autowired private RedisService redisService; @RequestMapping(value = "get",method = RequestMethod.GET) @ResponseBody public Object getByMyService(String key){ try { String result = redisService.get(key); return result; }catch (Exception e){ e.printStackTrace(); } return null; } }
Utilisez le package spring-data-redis pour l'intégration
Ce qui précède est le injection implémentée par moi-même, j'utilise ici L'intégration de spring-data-redis ne nécessite qu'une configuration simple. Vous devez référencer le package maven comme suit La version est la dernière version 1.7.2.RELEASE :
org.springframework.data spring-data-redis 1.7.2.RELEASEUtilisez spring-data-redis, c'est-à-dire save Au lieu d'implémenter le processus d'injection par vous-même, grâce à certaines des configurations qu'il fournit, vous pouvez réaliser la configuration du pool de connexions, la configuration RedisTemplate, la configuration JedisConnectionFactory, vous pouvez configurer la connexion ; paramètres du pool, serveur redis, port, mot de passe, délai d'attente, index de base de données, etc. ; RedisTemplate est le bean injecté. Vous pouvez utiliser les entités automatiquement injectées par RedisTemplate pour effectuer une série d'opérations redis. Plus précisément, voir la configuration ;
fichier de configuration des attributs du service redis :
redis.maxIdle=300redis.maxWait=3000redis.testOnBorrow=trueredis.host=192.168.31.121redis.port=6379redis.password=passwordredis.timeout=3000 spring-data-redis xml 配置文件 redis-context.xml: --> -->
Expliquez la configuration ci-dessus :
poolConfig configure le pool de connexions Redis, puis configure deux JedisConnectionFactory et RedisTemplate. Un RedisTemplate correspond à un JedisConnectionFactory, de sorte que Configuration Configure différentes connexions Redis selon le scénario. Par exemple, les exigences de délai d'attente sont incohérentes, la base de données 0-15 peut stocker. données différentes, etc. Les bases de données 1 et 2 sont configurées ici. L'appel de commonRedisTemplate l'enregistrera dans la base de données1 et l'appel de cacheRedisTemplate l'enregistrera dans la base de données2.
Ensuite, ces deux RedisTemplates peuvent être injectés et référencés dans la couche Service, de la manière suivante :
Enfin, appelez-les dans le Controllerimport org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.io.*; @Repository public class RedisCache { @Resource(name = "cacheRedisTemplate") private RedisTemplate
@Autowired private RedisCache redisCache; @RequestMapping(value = "get", method = RequestMethod.GET) @ResponseBody public Object getByMyService(String key) { try { String result = redisService.get(key); return result; } catch (Exception e) { e.printStackTrace(); } return null; } @RequestMapping(value = "save", method = RequestMethod.GET) @ResponseBody public Object save() { Token token = new Token(); token.setAccess_token("token"); token.setExpires_in(1000); try { redisCache.put("token", token); } catch (Exception e) { e.printStackTrace(); } return "ok"; }
Utilisez uniquement Jedis pour implémenter l'injection vous-même (différent de spring-data-redis référencé ci-dessous)
Prenez simplement le code JedisClusterClient précédent et citez-le, et il vous suffit de implémenter un accès au service Redis peut être intégré à Spring mvc. Le code du service est le suivant :
Appelez enfin le service implémenté dans le contrôleurimport org.springframework.stereotype.Service; import util.JedisClusterClient; /** * Created by fengdezitai on 2016/10/13. */ @Service public class RedisClusterService { public void save() throws Exception{ //调用 JedisClusterClient 中的方法 JedisClusterClient jedisClusterClient = JedisClusterClient.getInstance(); try { jedisClusterClient.SaveRedisCluster(); }catch (Exception e){ throw e; } } }Remarque :
@Controller @RequestMapping(value = "redisCluster") public class RedisClusterController { @Autowired private RedisClusterService redisClusterService; @RequestMapping(value = "save",method = RequestMethod.GET) @ResponseBody public Object save(){ try{ redisClusterService.save(); }catch (Exception e){ e.printStackTrace(); return String.format("error: %s",e.getMessage()); } return "ok"; } }
Problème de version, si vous utilisez spring-data - Redis effectue des opérations intégrées sur le cluster Reids. Seule la dernière version 1.7 de spring-data-redis inclut des opérations sur le cluster. Certaines fonctions de la dernière version de spring-data-redis ont également certaines restrictions sur la version de Spring mvc, alors essayez. pour choisir une version supérieure de Spring mvc correspondante.
Si la valeur stockée est un objet entité, alors l'interface Serialisable doit être implémentée
[Recommandations associées]
1
Explication détaillée du code d'utilisation de. Annotations du framework Spring ExempleExplication détaillée du code de Spring et Hibernate pour l'apprentissage de la gestion des transactions JavaPartage d'un exemple de tutoriel sur l'utilisation. Spring Boot pour développer des programmes Restful Explication détaillée des sept méthodes de retour prises en charge par spring mvc. 5. Explication détaillée des exemples d'implémentation améliorés de Spring basés sur des aspects 6 Exemples de PHPRPC pour Java Spring 8. 🎜 >Explication détaillée des tutoriels pratiques sur l'utilisation d'Elasticsearch au printemps
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!