今回はRedis基本知識を紹介します。
Redisとは
RedisはRemote Dictionary Serverの略です。
RedisはBSDライセンスの条件の下で開発され、Key-Value型のNoSQLデータベースです。
RedisはC言語で書かれております。
Redisデータ構造
string
list
set
zset
hash
list
set
zset
hash
ポート
Redis の デフォルトのポートは 6379 番です。
Windowsにインストール
Redis自体はWindows環境をサポートしていないため、MSOpenTeckを利用してインストールする。
サイトからZIPファイルをダウンロードし、Windowsに好きなフォルダに入れる。
指定したフォルダに解凍し、以下のようになります。
サーバ起動
redis-server.exe
サーバにアクセス
redis-cli.exe
Linuxにインストール
EC2(amazonlinux)の場合
amazon-linux-extras list | grep redis
amazon-linux-extras install -y redis6
amazon-linux-extras install -y redis6
インストール先
cd /usr/bin
ls | grep redis
ls | grep redis
結果:
redis-benchmark
redis-check-aof
redis-check-rdb
redis-cli
redis-sentinel
redis-server
redis-benchmark
redis-check-aof
redis-check-rdb
redis-cli
redis-sentinel
redis-server
プロパティディレクトリ
/etc/redis
起動
systemctl start redis
systemctl status redis
systemctl status redis
クライアントでサーバに接続
redis-cli
redis無効化
amazon-linux-extras disable redis6
Redisソースでインストール
RedisからRedisファイルをダウンロードし、指定のフォルダに解凍する
wget https://download.redis.io/releases/redis-6.2.4.tar.gz
tar -zxf redis-6.2.4.tar.gz
cd redis-6.2.4/
make && make PREFIX=/usr/local/redis install
cd /usr/local/redis
tar -zxf redis-6.2.4.tar.gz
cd redis-6.2.4/
make && make PREFIX=/usr/local/redis install
cd /usr/local/redis
プロパティをredisに入れる
mkdir /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc
起動
redis.confの設定値を変更する
daemonize on → yes
daemonize on → yes
起動
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
起動確認
netstat -tunpl | grep 6379
ps -ef | grep redis
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
起動確認
netstat -tunpl | grep 6379
ps -ef | grep redis
redis停止
pkill redis
リモートアクセス
vi redis.conf
bind=0.0.0.0
bind=0.0.0.0
データ操作
Key関連操作
すべてキー取得
Keys *
指定のキー名が存在するかチェック(0:存在しない 1:存在)
exists key_name
キーの数
dbsize
データベース変更
select 1
選択したデータベースのキー全部削除
flushdb
全部削除
flushdb all
Keys *
指定のキー名が存在するかチェック(0:存在しない 1:存在)
exists key_name
キーの数
dbsize
データベース変更
select 1
選択したデータベースのキー全部削除
flushdb
全部削除
flushdb all
string関連操作
set key value [ex 秒]/px ミリ秒 [nx]/[xx]
// nx:キーが存在したら、エラー。
// xx:キーが存在したら、更新。デフォルト値
// nx:キーが存在したら、エラー。
// xx:キーが存在したら、更新。デフォルト値
set id 100 //有効期限なし
mset key value key value // 複数key-valueを設定
ttl id //有効期限検索 -1:有効期限なし
mset key value key value // 複数key-valueを設定
ttl id //有効期限検索 -1:有効期限なし
type id // 値のデータ型確認
expire key 300 //有効期限設定(秒)
get key //キーの値を取得
mget key key // 複数のキーの値を取得
mget key key // 複数のキーの値を取得
//インクリメント
incr key
decr key
incrby key step
decrby key step
incr key
decr key
incrby key step
decrby key step
append key value //追加
get aa //”100–test”
getset aa 999 //”100–test”
get aa // “999”
getset aa 999 //”100–test”
get aa // “999”
list関連操作
lpush key value
rpop key
llen key
lrange key 0 2
lrange key 0 -1 //全部取得
lrange key -2 -1 // 最後の2個
rpop key
llen key
lrange key 0 2
lrange key 0 -1 //全部取得
lrange key -2 -1 // 最後の2個
rpush key value
lpop
lpop
rpoplpush key newkey // keyからデータ取得newkeyに設定
hash関連操作
テーブルの1レコードの内容を保存する。
keyはテーブル名:主キー:idで設定する方が良い。
hset key field value //一つ項目設定
hget key field
hget key field
del key //削除
hdel key field //指定の項目削除
hlen key //field数取得
hexists key field // 項目存在かチェック
hdel key field //指定の項目削除
hlen key //field数取得
hexists key field // 項目存在かチェック
hmset key field value [field value] // 複数項目設定
hmget key field [field]
hgetall key //全部取得
hmget key field [field]
hgetall key //全部取得
hincrby key field 1
hkeys key
hvals key
hvals key
set関連操作
setは重複のデータを保存できない。
sadd key value1 value2 // データ追加
smembers key //key のデータ取得(全部)
scard key // 個数取得
srem key value1 //指定のデータ削除
spop key //任意のデータ削除
spop key //任意のデータ削除
sismember key value //指定のデータが存在か
smove sSet nSet value // 指定のvalueをsSetからnSetに移動
sinter key1 key2 //key1,key2に同じ値を取得
sunion key1 key2 //key1,key2にすべて値を取得
sdiff key1 key2 //key1からkey2に存在しない値を取得
zset関連操作
zadd key score value // score :数値
zrem key value // 削除
zrange key start end [withscores] // 大→小
zrevrange key start end [withscores] // 小→大
zrange key 0 -1 // 全部取得
zrevrange key start end [withscores] // 小→大
zrange key 0 -1 // 全部取得
zremrangebyscore key min max //score により削除
zcard key // 個数
zcount key minscore maxscore // score 範囲内
zscore key value
zincrby key score value
pub/sub機能
subscribe channel
psubscribe ss*
psubscribe ss*
publish channel value
データ永続化
rdb(デフォルトON)
Redisでは特定の時点のスナップショットをRDBファイルとして保存することができます。RDBはデータベースのダンプファイルに相当します。
vi /etd/redis/redis.conf
# 秒 コマンド数
save 900 1 # 1回の更新後 900 秒以内に同期する
save 300 10 # 10回の更新後 300 秒以内に同期する
save 60 10000 # 10,000回の更新後 60 秒以内に同期する
dbfilename dump.rdb # RDBのファイル名を指定する
rdbcompression yes # RDBの圧縮要否を指定する
dir ./ # RDB/AOFの格納ディレクトリを指定する
# 秒 コマンド数
save 900 1 # 1回の更新後 900 秒以内に同期する
save 300 10 # 10回の更新後 300 秒以内に同期する
save 60 10000 # 10,000回の更新後 60 秒以内に同期する
dbfilename dump.rdb # RDBのファイル名を指定する
rdbcompression yes # RDBの圧縮要否を指定する
dir ./ # RDB/AOFの格納ディレクトリを指定する
aof(手動)
AOFはデータベースのWAL/REDOログに似た書き込みログで、すべての書き込みコマンドが追記で記録されます。
vi /etd/redis/redis.conf
appendonly yes # AOFの利用要否を指定する
appendfilename “appendonly.aof” # デフォルトは appendonly.aof となる
appendfsync everysec # デフォルトで秒単位に同期する(中速で動作する)→おすすめ
# appendfsync always # 常に同期する(低速だが安全に動作する)
# appendfsync no # OSに任せる(高速に動作する)
auto-aof-rewrite-min-size 32mb
# AOFのファイルサイズが32MByte以下はリビルド(最適化)の対象外とする
auto-aof-rewrite-percentage 100
# AOFのファイルサイズが倍増(100%)した場合にリビルド(最適化)する
appendonly yes # AOFの利用要否を指定する
appendfilename “appendonly.aof” # デフォルトは appendonly.aof となる
appendfsync everysec # デフォルトで秒単位に同期する(中速で動作する)→おすすめ
# appendfsync always # 常に同期する(低速だが安全に動作する)
# appendfsync no # OSに任せる(高速に動作する)
auto-aof-rewrite-min-size 32mb
# AOFのファイルサイズが32MByte以下はリビルド(最適化)の対象外とする
auto-aof-rewrite-percentage 100
# AOFのファイルサイズが倍増(100%)した場合にリビルド(最適化)する
トランザクション
MULTI, EXEC, DISCARD および WATCH は Redis におけるトランザクションの基本です。
watch key1 key2 // key1 key2の値は変更があれば、execで実行失敗となる。
multi // トランザクション開始
//処理
exec
multi // トランザクション開始
//処理
exec
watch key1 key2 // key1 key2の値は変更があれば、execで実行失敗となる。
multi // トランザクション開始
//処理
discard // 実行キャンセル
multi // トランザクション開始
//処理
discard // 実行キャンセル
セキュリティ
アクセスip制限
redis.confファイルにbindで設定されたIPのみアクセスできる。
パスワード
redis.confファイルにrequirepass パスワード
接続
redis-cli
auth パスワード
auth パスワード
レプリケーション
slaveサーバのconf変更
vim /etc/redis/redis.conf
replicaof <masterip> <masterport>
masterauth <master-password>
replicaof <masterip> <masterport>
masterauth <master-password>
確認
redis-cli
INFO
redis-cli
INFO