Memo/Linux/redis

https://dexlab.net:443/pukiwiki/index.php?Memo/Linux/redis
 

redis: キャッシュエンジン

  • Redis
    • インメモリ型KVS(Key Value Store)
    • memcacheとよく比較される。
    • データのパーティションが可能。db0,db1,...
    • 定期的にデータをディスクに書く事で、永続化
    • 複雑なデータ形式のサポート
    • RDBとの違い
      • 高速なread/write
      • 容量の上限が小さい。メモリ割り当て可能な部分のみ。
      • クラッシュセーフではない。あくまで失われても良いデータのキャッシュとして使う

protected mode

redis 3.2.0以降で以下メッセージが出るようになった。

  • bind, requirepass が未設定の場合に出る。外部から無制限にアクセスできる設定の場合、警告される。
 DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients.
 In this mode connections are only accepted from the loopback interface.
 If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so.
 Use CONFIG REWRITE to make this change permanent.
 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server.
 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option.
 4) Setup a bind address or an authentication password.
 NOTE: You on
  • 解決
    • 外部から接続できないように /etc/redis.conf に設定する
      # 0.0.0.0はインターネットからも接続できるため使わない方が安全
      bind <private ip addr>
      
      # 接続用パスワード
      requirepass <password>
      
      # 接続用パスワードを設定したくない場合
      protected-mode no

CLIENT SETNAME: 接続に名前を付ける

「client list」で接続一覧を取得するときに「name=」でconnection名が表示されるようになる。
プログラムからのアクセスや、人のアクセスとの区別ができるので付けた方が良さそう。

redis 127.0.0.1:6379> CLIENT SETNAME connection-name

トラブルシューディング

  • --bigkeys: 一番サイズの大きいVALUEを持つKEYをデータ型毎に出力
    redis-cli -n 0 --bigkeys

flushdb/flushall: 削除

  • FLUSHDB – Redis -nで指定したDBだけ削除
    redis-cli -h localhost -p 6379 -n 0 flushdb 
    
    # ncを使う場合
    (echo -e "select 0"; sleep 1; echo "flushdb"; sleep 1) | nc localhost 6379
  • FLUSHALL – Redis 全DB削除。-n 0でDB指定してもエラーは出ないが、全DBが消える
    redis-cli -h localhost -p 6379 flushall

CLI

  • redis-cli: CentOS 7 redis 3.2.12
    sudo yum install redis
    
    # ping/pong
    redis-cli -h localhost -p 6379 ping
    PONG
  • nc(netcat)でも代用可能
    • 成功の場合は"+"、失敗の場合は"-"が付く。失敗してもexit codeは0のまま。
    • RESP Errors
      (echo ping;sleep 1) | nc localhost 6379
      +PONG
  • DB一覧
    redis-cli -h localhost -p 6379 info | grep ^db
    
    db0:keys=101,expires=360,avg_ttl=12345678
    
    (echo -e "info";sleep 1) | nc localhost  6379 | grep ^db
    
    db0:keys=101,expires=360,avg_ttl=12345678
  • DBサイズ。-nでDB指定
    redis-cli -h localhost -n 0 dbsize
    (integer) 101
    
    (echo -e "select 0"; sleep 1; echo "dbsize"; sleep 1) |
     nc localhost 6379
    +OK
    :101

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-04-17 (水) 16:31:31 (154d)