LoginSignup
18

More than 5 years have passed since last update.

SpringBootでRedisを使ってみる

Last updated at Posted at 2018-11-18

はじめに

  • 今回は最近よく耳にするNoSQLというやつを使ってみる
  • NoSQLのうちRedisを使用する
  • とりあえず動かすところまでを目標とする
  • nosqlとRDBの違いがわからない人は他の方の記事を参考にしてください(詳しくは触れないです)

対象

  • あくまでもJava(SpringBoot)ユーザー&&NoSQL初心者
  • NoSQLに興味ある人

Redisとは?

  • NoSQLの一種
  • オープンソースなやつ(他にも有名どこだと、CassandraとかMongoDBとか。使ったことはないです)
  • KVSのデータベース(Mapみたいなイメージ?違ったらごめんなさい)

NoSQLについては、この方の記事がすごいうまくまとまっていたので、参考にしてください。
NoSQLについて勉強する。

早速遊んでみる

用意したもの

  • Macのターミナル
  • IntelliJ(SpringBoot+Gradle)

redis側

ターミナルからbrew installでredisをインストールする

% brew install redis

redis-serverで確認する

% redis-server

こんなやつがでたらOKです。
image.png
Ctrl+Cで抜けちゃいましょう。

redis-cliする

image.png
怒られたので・・・

以下のコマンドを実行する

% ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents

% launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

再度redis-cliする

image.png
入れたみたいです。遊べました!

Spring側

  • 適当にアプリケーションは用意してください
build.gradle
compile ('org.springframework.boot:spring-boot-starter-redis:1.4.7.RELEASE')

上記の設定を追加するだけで、RedisTemplateが使えるようになります。
こいつを使ってあげることで、Mapをつかうような感覚でRedisにKeyとValueを登録できます。

application.yml
spring.redis:
  host: localhost
  port: 6379
  password: null
  database: 0

こんな感じでymlに書いておけば、もうredisが使えます。デフォルトの設定値なので書く必要なかったらごめんなさい。
databaseはデフォルトで0から使いにいくようになってるっぽいです。

動かしてみる

そんなこんなで、もうRedisに登録できるようになってはいるのですが、あとはちょろとサンプルコードだけあげておきます。

RedisSampleData


@Data
@Getter
@Setter
class RedisSampleData {

    private String string;

    private List<String> list;

    private Map<String, String> map;

}
RedisSampleController


@RestController
@RequestMapping(value = "/SampleRedis")
public class RedisSampleController {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @PostMapping
    public void post(@RequestBody RedisSampleData redisSampleData) {
        redisTemplate.delete("redis-tutorial:string");
        redisTemplate.opsForValue()
                .set("redis-tutorial:string", redisSampleData.getString());
        redisTemplate.delete("redis-tutorial:list");
        redisTemplate.opsForList()
                .rightPushAll("redis-tutorial:list",
                        redisSampleData.getList().toArray(new String[0]));
        redisTemplate.delete("redis-tutorial:map");
        redisTemplate.opsForHash()
                .putAll("redis-tutorial:map", redisSampleData.getMap());
    }

    @GetMapping
    public RedisSampleData get() {
        RedisSampleData redisSampleData = new RedisSampleData();
        redisSampleData.setString(
                redisTemplate.opsForValue()
                        .get("redis-tutorial:string")
        );
        redisSampleData.setList(
                redisTemplate.opsForList()
                        .range("redis-tutorial:list", 0, -1)
        );
        redisSampleData.setMap(
                redisTemplate.<String, String>opsForHash()
                        .entries("redis-tutorial:map")
        );
        return redisSampleData;
    }
}
request.json
{
  "string": "太郎",
  "list": [
    "二郎",
    "三郎"
  ],
  "map": {
    "田中": "太郎",
    "山田": "二郎"
  }
}

叩いてみる・・・

% curl -X POST -H "Content-Type: application/json" http://localhost:8080/SampleRedis -d @request.json

% curl "localhost:8080/SampleRedis"

image.png

雑感

  • SpringBootのおかげで結構簡単に使い始めることはできた
  • ちゃんと使えるようになるにはもう少し時間がかかりそう

参照元

Spring Data Redis

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18