这是学习的第二篇文章,很显然,这个免费的接口能承受的并发是很低的,并且我们的服务器作为一个中转站去向这个接口请求数据也非常地耗时,于性能和稳定性都没有保障,所以我们需要redis作为缓存来提高性能。所以,我们需要用redis来重构一下。
先引入一下依赖:
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
|
思路很简单:缓存中有数据的时候,就直接从缓存中拿即可,若缓存中没有此数据,就去调用接口重新获取并且再存到缓存中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| private static final long TIME_OUT = 30*60L;
private WeatherResponse doGetWeather(String uri){ String key = uri; String strBody = null; WeatherResponse resp = null; ObjectMapper mapper = new ObjectMapper();
ValueOperations<String,String> ops = stringRedisTemplate.opsForValue();
if(stringRedisTemplate.hasKey(uri)){ log.info("Redis has data!"); strBody = ops.get(key); }else{ log.info("Redis don't thas data!"); ResponseEntity<String> resString = restTemplate.getForEntity(uri,String.class);
if(resString.getStatusCodeValue() == 200) { strBody = resString.getBody(); }
ops.set(key,strBody,TIME_OUT, TimeUnit.SECONDS); }
try { resp = mapper.readValue(strBody,WeatherResponse.class); }catch (IOException e){ log.error("Error!",e); }
return resp; }
|
一开始可以将过期时间缩短一点,这里redis直接启动即可,默认端口是6379.