Informationen zum Redis-Cluster-Aufbau finden Sie in meinem anderen Artikel Redis-Cluster-Aufbau und einfache Verwendung
Was ist Redis und was kann es?
Redis ist eine Open Source (BSD-Lizenz). ), Speicher Ein Server mit gespeicherter Datenstruktur, der als Datenbank, Cache und Nachrichtenwarteschlangenbroker verwendet werden kann. Es unterstützt Strings, Hash-Tabellen, Listen, Mengen, geordnete Mengen, Bitmaps, Hyperloglogs und andere Datentypen. Integrierte Replikation, Lua-Skripte, LRU-Eviction, Transaktionen und verschiedene Ebenen der Festplattenpersistenzfunktionen bei gleichzeitiger Bereitstellung hoher Verfügbarkeit durch Redis Sentinel und automatischer Partitionierung durch Redis Cluster. (Auszug aus der offiziellen Redis-Website)
Als In-Memory-Datenbank wird Redis immer noch hauptsächlich als Cache in modernen Internet-Websystemen verwendet. Große Internet-Websysteme stellen hohe Leistungsanforderungen, und das Hinzufügen von Daten-Caching zwischen dem Front-End und der Datenschicht ist zu einem der wesentlichen Mittel geworden. Die beiden derzeit beliebten Technologien sind Redis und Memcached nicht das, worum es in diesem Artikel geht. In diesem Artikel geht es hauptsächlich darum, wie Java Web Redis und Redis-Cluster betreibt.
Allgemeiner Java-Programmbetrieb Redis
Redis bietet Clients in mehreren Sprachen, die beliebteste in Java ist Jedis. Besuchen Sie, um den Quellcode und seine Verwendung anzuzeigen. Derzeit ist die neueste Version von Jedis 2.9.0. Unabhängig davon, ob es sich um eine eigenständige Maschine oder einen Cluster handelt, bietet Jedis sehr detaillierte Anweisungen und Beispielcodes. Hier nur eine kurze Erklärung. Wenn Sie Maven für die Paketverwaltung verwenden, müssen Sie auf das Jedis-Paket verweisen, wie folgt:
redis.clients jedis 2.9.0
Operation Redis Standalone
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 betreibt Redis
Um Redis in Spring MVC zu betreiben, müssen Sie natürlich zuerst das Spring MVC-Framework einrichten. Im Folgenden wird davon ausgegangen, dass die Spring MVC-Umgebung eingerichtet wurde. In diesem Beispiel ist die Spring-Version 4.3.2 RELEASE. Die Maven-Referenz zu Spring lautet wie folgt:
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}
Betreiben Sie Redis eigenständig
Verwenden Sie Jedis nur zum Implementieren der Injektion (anders als die folgende Referenz Spring-Data-Redis)
Der vorherige JedisClient-Code kann referenziert werden. Sie müssen nur einen Dienst implementieren, um auf Redis zuzugreifen, und dieser kann in Spring MVC integriert werden. Der Servicecode lautet wie folgt:
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; } }
Controller wird wie folgt implementiert:
@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; } }
Verwenden Sie das Spring-Data-Redis-Paket für die Integration
Das Obige ist das Die von mir selbst implementierte Injektion erfordert nur eine einfache Konfiguration. Die Version ist die neueste Version 1.7.2.RELEASE:
org.springframework.data spring-data-redis 1.7.2.RELEASE
Verwenden Sie spring-data-redis, d. h. Speichern Anstatt den Injektionsprozess selbst zu implementieren, können Sie über einige der bereitgestellten Konfigurationen die Verbindungspoolkonfiguration, die RedisTemplate-Konfiguration und die JedisConnectionFactory-Konfiguration realisieren und die Verbindung konfigurieren Poolparameter, Redis-Server, Port, Passwort, Zeitüberschreitung, Datenbankindex usw.; RedisTemplate ist die automatisch injizierte Bean. Weitere Informationen finden Sie in der Konfiguration >
Redis-Dienstattribut-Konfigurationsdatei:redis.maxIdle=300 redis.maxWait=3000 redis.testOnBorrow=true redis.host=192.168.31.121 redis.port=6379 redis.password=password redis.timeout=3000
--> -->
import 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"; }
Nehmen Sie einfach den vorherigen JedisClusterClient-Code und verweisen Sie darauf. Sie müssen nur einen Dienst implementieren, um auf Redis zuzugreifen. Das ist möglich in Spring mvc integriert werden. Der Service-Code lautet wie folgt:
Rufen Sie abschließend den implementierten Service im Controller aufimport 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; } } }
@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"; } }
Redis-Cluster-Service-Attributkonfiguration
spring-data-redis xml Cluster-Konfigurationsdatei redis-cluster-context.xmlredis.maxIdle=300 redis.maxWait=3000 redis.testOnBorrow=false redis.timeout=3000
<br/>
<br/>
Anschließend kann dieses RedisTemplate in die Service-Schicht eingefügt und referenziert werden. Der Code lautet wie folgt:
Zum Schluss rufen Sie es im Controller auf 🎜>Hinweise:Versionsproblem: Wenn Sie Spring-Data-Redis zum Integrieren des Reids-Clusters verwenden, enthält nur die neueste Version 1.7 von Spring-Data-Redis Operationen auf dem Cluster, einige Funktionen in den neuesten Spring-Data-Redis jedoch nicht Geeignet für Die Version von Spring MVC weist auch einige Einschränkungen auf. Versuchen Sie daher, eine höhere Version von Spring MVC auszuwählen.
Wenn der gespeicherte Wert ein Entitätsobjekt ist, muss die Serialisierbare Schnittstelle implementiert werden
[Verwandte Empfehlungen]
1. Detaillierte Erläuterung des Verwendungscodes von Beispiel für Spring-Framework-Anmerkungen
2. Detaillierte Code-Erklärung von Spring und Hibernate zum Erlernen der Java-Transaktionsverwaltung