凡ジニアのtxt

エンジニアリングができないエンジニア

Redisとは

Redis

f:id:aki5151:20210728005934p:plain

 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

引用: https://redis.io/

 つまり、ヒープ領域のメモリ内に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構成を実現する設定もあるので、自動フェイルオーバーの挙動もやってみたい。