Redisとは
Redis
Redisとは、データベースやキャッシュ、メッセージブローカーのように使うことができるインメモリのデータストアのオープンソースである。
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams
つまり、ヒープ領域のメモリ内にCRUDが可能なデータベースだと思われる。メモリはストレージよりread/writeが早いので、高速なデータ管理が実現可能になる。Redisの使用例を見ると、ビックデータの一時データ格納先にしたり、ユーザーのセッション管理に用いられることが多いようである。
Redisの起動
今回はdocker環境上にRedisを構築します。以下、簡単な設定のRedisのdocker-compose.yamlになります。
version: '3' services: master: image: "redis:latest" hostname: master command: redis-server
docker compose up
のコマンドでRedisを起動させます。
# docker-composeの起動 docker compose up # dockerプロセスの確認 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1b95c0719f0e aa4d65e670d6 "docker-entrypoint.s…" 7 seconds ago Up 3 seconds 6379/tcp redis-master-slave_master_1 # docker上のRedisが起動しているか確認 docker exec -it redis-master-slave_master_1 redis-cli info # Server redis_version:6.2.5 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:cc49a38120feeb6b redis_mode:standalone os:Linux 5.10.25-linuxkit x86_64 arch_bits:64 multiplexing_api:epoll atomicvar_api:c11-builtin gcc_version:8.3.0 process_id:1 process_supervised:no run_id:efd6d591ad6057fe858f81e74ae066dcb1eadd2b tcp_port:6379 server_time_usec:1627399820470195 uptime_in_seconds:69 uptime_in_days:0 hz:10 configured_hz:10 lru_clock:9868 executable:/data/redis-server config_file: io_threads_active:0 ... (省略)
次に、key-valueを登録させてRedisの挙動を確認します。
# Redisにkey-valueに登録 docker exec -it redis-master_1 redis-cli set str "test" OK # 登録されたkey-valueを確認 docker exec -it redis-master_1 redis-cli get str "test" # JSON形式でも登録 docker exec -it redis-_master_1 redis-cli set json "{ test: "" }" OK # 登録されたJSON形式のkey-valueを確認 docker exec -it redis-master_1 redis-cli get json "{ test: }"
RedisのMaster/Slave構成の確認
RedisのMaster/Slave構成も確認しておきます。レプリケーションができるようにMaster1台/Slave1台の構成を以下にします。
version: '3' services: master: image: "redis:latest" hostname: master command: redis-server slave: image: "redis:latest" hostname: slave command: redis-server --slaveof master 6379
docker-composeを起動させ、Master用のRedisにkey-valueを登録し、Master/Slave共に登録できているか確認します。
# docker-composeを起動 docker compose up # dockerプロセスを確認 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 10e64077c5ae aa4d65e670d6 "docker-entrypoint.s…" 19 seconds ago Up 15 seconds 6379/tcp redis-master-slave_slave_1 494d55f1bc71 aa4d65e670d6 "docker-entrypoint.s…" 19 seconds ago Up 15 seconds 6379/tcp redis-master-slave_master_1 # Master用のRedisにkey-valueに登録 docker exec -it redis-master_1 redis-cli set str "test1" OK # Master用のRedisにkey-valueを確認 docker exec -it redis-master_1 redis-cli get str "test1" # Slave用のRedisにkey-valueを確認 docker exec -it redis-slave_1 redis-cli get str "test1"
また、Slaveを更に増やしたい場合はdocekr compose up --scale slave=2
とすれば、Master1台/Slave2台の構成を構築することもできます。
所感
会社の商用環境で、Redisが使われていて触ってみたかったので、簡単な設定でRedisを構築してみました。やっぱり、実際に動かしてみた方が理解しやすいので、docker環境で試せるのは楽だな。RedisにはSentinelというHA構成を実現する設定もあるので、自動フェイルオーバーの挙動もやってみたい。