Spring Session+Redisの動作確認
業務でRedisをセッション管理などに使っているが、普段意識していないKeyとValueについて調べてみた。
サンプル
https://github.com/vagivagi/demo-redis
Spring Session + Redis
Spring SessionとRedisの連携は簡単だ。org.springframework.boot:spring-boot-starter-data-redis
とorg.springframework.session:spring-session-data-redi
を依存に追加すれば良い。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
compile 'org.springframework.session:spring-session-data-redis'
}
@SessionAttributesの中身
ライブラリの設定が終わったら、セッションを使うクラスを作成して、redisを一緒にSpringBootアプリケーションをローカル起動する。
Controllerクラス作成
@SessionAttributes
に適当なフォームクラスのインスタンスを設定して、ローカル起動して、画面からデータを入力する。
@Controller
@SessionAttributes("userForm")
@RequestMapping("user")
public class UserController {
@GetMapping("input")
String inputForm(Model model) {
UserForm user = new UserForm();
model.addAttribute("userForm", user);
return "form";
}
// ...
}
Redisの起動とredis-cliでキー名の確認
前提
- docker-composeを使って環境設定しているので、dockerを事前に設定する
- redis-cliを使えるようにしておく
spring:session:...
のようなキーがRedisに入力されていることが分かる。大した設定をせずに、Key-Valueストアにセッション情報を格納できるので、楽だった。Keyの命名規則など意識せずに使えることもメリット。
$ docker-compose up -d #dockerでredisローカル起動
$ redis-cli
127.0.0.1:6379> keys *
1) "spring:session:expirations:1595164620000"
2) "spring:session:sessions:expires:62ef319b-ff5e-4615-b8c3-3e4a20c1d1e6"
3) "spring:session:sessions:62ef319b-ff5e-4615-b8c3-3e4a20c1d1e6"
余談
前職だとRedisのようないわゆるNoSQLを含めた構成のアプリはあまり見かけなかった。オンプレミス環境であまりアクセス数が多くないアプリが多かったため、導入していなかったかもしれないが、もし導入するとしたら、どういう口実で導入すれば良かったか悩ましい。まあ既存アプリに導入することは考えず、新規アプリでクラウドで構築する案件だったら、しれっと構成に入れておけばいいのか。
Spring Sessionに関する別調査
同サンプルを用いて、@SessionAttributes
を付与したクラスの動作を追加検証した。
https://vagivagi.com/entries/22