From bfd69f36f80ed44fe78935c0f6c08065b1431bc0 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Mon, 7 Jan 2019 20:15:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D0=BC=20=D0=BD=D0=B0=20Spring=20Data=20Redis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ks.server/pom.xml | 17 +++++++--- .../main/java/ks/server/SpringConfigMVC.java | 20 ++++++------ .../java/ks/server/service/CinemaService.java | 32 ++++++++++--------- 3 files changed, 39 insertions(+), 30 deletions(-) diff --git a/ks.server/pom.xml b/ks.server/pom.xml index b7c081c..a9ca06a 100644 --- a/ks.server/pom.xml +++ b/ks.server/pom.xml @@ -64,6 +64,18 @@ ${spring.version} + + + org.springframework.data + spring-data-redis + 2.1.3.RELEASE + + + redis.clients + jedis + 2.9.0 + + org.eclipse.jetty @@ -104,11 +116,6 @@ gson 2.8.5 - - redis.clients - jedis - 3.0.1 - diff --git a/ks.server/src/main/java/ks/server/SpringConfigMVC.java b/ks.server/src/main/java/ks/server/SpringConfigMVC.java index 5ca98a1..4bb5929 100644 --- a/ks.server/src/main/java/ks/server/SpringConfigMVC.java +++ b/ks.server/src/main/java/ks/server/SpringConfigMVC.java @@ -4,12 +4,14 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.GsonHttpMessageConverter; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import redis.clients.jedis.Jedis; import java.util.List; @@ -34,14 +36,12 @@ public class SpringConfigMVC implements WebMvcConfigurer { } @Bean - public Jedis jedis() { - Jedis jedis = new Jedis("127.0.0.1", 6379); - jedis.connect(); - if (jedis.isConnected()) { - log.info("Redis server ready"); - } else { - log.warn("Redis server not ready!"); - } - return jedis; + public JedisConnectionFactory redisConnectionFactory() { + return new JedisConnectionFactory(new RedisStandaloneConfiguration("127.0.0.1", 6379)); + } + + @Bean + public StringRedisTemplate redisTemplate(JedisConnectionFactory jedisConnectionFactory) { + return new StringRedisTemplate(jedisConnectionFactory); } } diff --git a/ks.server/src/main/java/ks/server/service/CinemaService.java b/ks.server/src/main/java/ks/server/service/CinemaService.java index 3838d1f..347660b 100644 --- a/ks.server/src/main/java/ks/server/service/CinemaService.java +++ b/ks.server/src/main/java/ks/server/service/CinemaService.java @@ -6,8 +6,11 @@ import ks.server.cinema.Animevost; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; +import org.springframework.data.redis.RedisConnectionFailureException; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; -import redis.clients.jedis.Jedis; + +import java.util.concurrent.TimeUnit; @Slf4j @Service @@ -16,7 +19,7 @@ public class CinemaService { @Autowired private ApplicationContext applicationContext; @Autowired - private Jedis jedis; + private StringRedisTemplate redisTemplate; private Animevost realGet(String uri) { Animevost animevost = new Animevost(); @@ -25,25 +28,24 @@ public class CinemaService { } public Animevost getCinema(String uri) { - if (jedis.isConnected()) { - final String key = "cache:cinema:animevost:" + uri; - if (jedis.exists(key)) { + final String key = "cache:cinema:animevost:" + uri; + + try { + Boolean hasKey = redisTemplate.hasKey(key); + + if (hasKey != null && hasKey) { log.info("get data from redis"); - return GSON.fromJson(jedis.get(key), Animevost.class); + return GSON.fromJson(redisTemplate.opsForValue().get(key), Animevost.class); } else { log.info("get data from site"); Animevost animevost = realGet(uri); - jedis.setex(key, 60, GSON.toJson(animevost)); + redisTemplate.opsForValue().set(key, GSON.toJson(animevost), 60, TimeUnit.SECONDS); return animevost; } - } else { - jedis.connect(); - if (jedis.isConnected()) { - return getCinema(uri); - } else { - log.warn("Redis disconnected!"); - return realGet(uri); - } + } catch (RedisConnectionFailureException e) { + log.warn("Redis connection failure!"); + log.debug("", e); + return realGet(uri); } } }