diff --git a/ks.server/pom.xml b/ks.server/pom.xml index 33f68f2..b7c081c 100644 --- a/ks.server/pom.xml +++ b/ks.server/pom.xml @@ -104,6 +104,11 @@ 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 5d54fe4..5ca98a1 100644 --- a/ks.server/src/main/java/ks/server/SpringConfigMVC.java +++ b/ks.server/src/main/java/ks/server/SpringConfigMVC.java @@ -1,5 +1,7 @@ package ks.server; +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.http.converter.HttpMessageConverter; @@ -7,9 +9,11 @@ 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; +@Slf4j @Configuration @ComponentScan({ "ks.server.controllers", @@ -28,4 +32,16 @@ public class SpringConfigMVC implements WebMvcConfigurer { public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false); } + + @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; + } } 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 fac5ad1..3838d1f 100644 --- a/ks.server/src/main/java/ks/server/service/CinemaService.java +++ b/ks.server/src/main/java/ks/server/service/CinemaService.java @@ -1,19 +1,49 @@ package ks.server.service; +import com.google.gson.Gson; import ks.server.browser.Browser; 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.stereotype.Service; +import redis.clients.jedis.Jedis; +@Slf4j @Service public class CinemaService { + private static final Gson GSON = new Gson(); @Autowired private ApplicationContext applicationContext; + @Autowired + private Jedis jedis; - public Animevost getCinema(String uri) { + private Animevost realGet(String uri) { Animevost animevost = new Animevost(); animevost.fillInfo(uri, applicationContext.getBean(Browser.class)); return animevost; } + + public Animevost getCinema(String uri) { + if (jedis.isConnected()) { + final String key = "cache:cinema:animevost:" + uri; + if (jedis.exists(key)) { + log.info("get data from redis"); + return GSON.fromJson(jedis.get(key), Animevost.class); + } else { + log.info("get data from site"); + Animevost animevost = realGet(uri); + jedis.setex(key, 60, GSON.toJson(animevost)); + return animevost; + } + } else { + jedis.connect(); + if (jedis.isConnected()) { + return getCinema(uri); + } else { + log.warn("Redis disconnected!"); + return realGet(uri); + } + } + } }