##はじめに
- 今回は最近よく耳にする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です。
Ctrl+Cで抜けちゃいましょう。
###以下のコマンドを実行する
% ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
% launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
###再度redis-cliする
入れたみたいです。遊べました!
##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"
##雑感
- SpringBootのおかげで結構簡単に使い始めることはできた
- ちゃんと使えるようになるにはもう少し時間がかかりそう