Spring MVC 導入Redis 初探

最近覺得回歸資訊業後踩過的雷和用的東西好像越來越多,好像開始需要紀錄一下,這篇就當做第一篇吧!

前情提要

最近在負責開發的系統其中的一個頁面,當使用者進入後後端會即時依照使用者已設定好的關鍵字去Elasticsearch中找出Twitter上相關的Tweets和 Date Histogram Aggregation (如下圖)。

最近發現當使用者的關鍵字設定達到一定的數量後會讓Loading的時間變很長(>10s)。這其實也蠻合理的,同時對大量的資料做Aggregation當然會慢。當初這個系統在設計沒有考慮到這問題,就來辦法來解決拉

Survey Solution

當初一開始想說既然一次Loading要很久的話,那就分批 Loading囉。
就先看了一下Facebook那種無限捲軸怎麼做。但後來發現目前頁面的排版不用往下拉就會先載入10幾個關鍵字的資料,這樣做不會變快多少。

那竟然動態Loading的方式不行的話,就加個Cache吧!!!
之前很早就耳聞Redis這個強大的Cache Database了,趁這次機會來熟悉一下。

當初開始實作前有跟一位另一個專案的同事提這個想法,他當時給我一個Feedback讓我蠻映像深刻的

要導入Redis的話,在環境的建置及導入上會不會有什麼困難

大意大概是這樣,詳細有點忘了XD
當時就想說我們都有在用Docker了,應該一下就建置好了吧
(事實證明真的沒有當初想的這麼容易,建置確實用Docker建置很容易但在Spring 跟Redis的間接上有遇到了些困難,以及還存在需要去tune Redis 的issue)

成果如下,載入速度從10sec 加快到只要不到1 sec,效果還算不錯

Spring 導入Redis

以下為Spring 加入Redis的筆記

Step 1. 建置Redis Server

Redis就很簡單的直接用Docker直接run囉

Step 2. Spring 建立Redis DAO

2.1 Add Maven Dependency

這裡踩到的一個小雷,就是spring-data-redis 與jedis有版本相依性的問題,升級是要注意一下

2.2 Add Redis connection factory

在spring 的xml中新增以下4個bean

  • jedisPoolConfig
  • jedisConnectionFactory
  • StringRedisSerializer
  • redisTemplate

2.3 Create Redis DAO

Reference

Redis Overview

Redis with Spring

Written by

吳宗庭, Full-stack Web Developer, DevOps Engineer, Guitarist, Sound Engineer at Taiwan

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store