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囉
docker run \
--name some-redis \
-p 6379:6379 \
-v /path/to/your/redis/data/directory:/data \
-d \
launcher.gcr.io/google/redis4
Step 2. Spring 建立Redis DAO
2.1 Add Maven Dependency
<!-- Redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.6.2.RELEASE</version>
</dependency><dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.5.1</version>
</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 | TechBridge 技術共筆部落格
- [Database] Redis筆記(1) — zxcvbnius’s website
- Redis 设计与实现 — Redis 设计与实现