🙌

Dragonflyを試してみる

2022/07/19に公開

はじめに

Redis互換で25倍高速というふれこみのインメモリDB dragonfly を試してみます。個人的にはRedisで十分満足してるんですが、25倍速いと言われればどうしても使ってみたくなるのでさらっとやってみました。

起動してみる

一番簡単そうなのがdocker composeで起動するやつだったのでそちらでサクっと立ち上げてみる。

wget https://raw.githubusercontent.com/dragonflydb/dragonfly/main/contrib/docker/docker-compose.yml

docker-compose up -d

docker ps | grep dragonfly
de00a68de5ad   docker.dragonflydb.io/dragonflydb/dragonfly   "entrypoint.sh drago…"   11 seconds ago   Up 10 seconds   0.0.0.0:6379->6379/tcp   dragonfly-dragonfly-1

起動ログを確認する

docker logs dragonfly-dragonfly-1

I20220719 07:54:13.039849     1 init.cc:56] dragonfly running in opt mode.
I20220719 07:54:13.039968     1 dfly_main.cc:179] maxmemory has not been specified. Deciding myself....
I20220719 07:54:13.040131     1 dfly_main.cc:184] Found 6.89GiB available memory. Setting maxmemory to 5.51GiB
I20220719 07:54:13.042506    10 proactor.cc:456] IORing with 1024 entries, allocated 102720 bytes, cq_entries is 2048
I20220719 07:54:13.043591     1 proactor_pool.cc:66] Running 4 io threads
I20220719 07:54:13.046394     1 server_family.cc:193] Data directory is "/data"
I20220719 07:54:13.046569     1 server_family.cc:117] Checking "/data/dump"
I20220719 07:54:13.046802    11 listener_interface.cc:79] sock[15] AcceptServer - listening on port 6379

正常に起動したようだ。コンテナ内では/dataがデータディレクトリ。docker-compose.ymlにも定義されているがこれを外部ストレージにマウントしてやる。

こちらに記載があるがdockerで起動する際に--ulimit memlock=-1オプションを指定する必要がある。Linuxの種類によってはデフォルトのmemlock limitが制限されている。dragonflyはそれを超えてリソースを使用するからだそうだ。

使ってみる

コンテナ起動後http://localhost:6379/にアクセスするとステータス画面が表示される。そこはかとなくリッチ。

image1

redis-cliで操作してみる

redis-cli -h localhost -p 6379
localhost:6379> 
localhost:6379> keys *
(empty array)
localhost:6379> set test1 1.0
OK
localhost:6379> keys *
1) "test1"
localhost:6379> get test1
"1.0"
localhost:6379> mset test2 2.0 test3 3.0 test4 4.0 test5 5.0
OK
localhost:6379> keys *
1) "test4"
2) "test5"
3) "test3"
4) "test2"
5) "test1"
localhost:6379> exit

ステータス画面で登録されているkeyが5になった。

image2

Redis APIのサポート状況はここで確認できる。

おわりに

負荷かける環境を準備するのが面倒だったので今回はここまで。普通に使えそうな雰囲気なので何かのプロジェクトでデータキャッシュをRedisから乗り換えて運用してみてもいいかなと思った。

Discussion