REDIS一括削除コマンド説明
3014 ワード
REDIS一括削除コマンド説明
1.redisルートディレクトリcd/usr/local/redis-2.8.19へのアクセス
2.redisへのログイン:redis-cli-h 127.0.0.1-p 6379(うち、127.0.0.1はサーバのIPアドレス、6379はポート番号)
3.すべてのkey値の表示:keys*
4.指定したインデックスの値を削除する:del key
5.Redisサーバ全体のデータを空にする:flushall
6.現在のライブラリ内のすべてのkey:flushdbを空にする
【第1の方法】:
次は一括削除で「key_」先頭のすべてのredisデータ数は100個です
【上記コマンドのDEL関数の具体的な使い方】
DEL key [key ...]
指定された1つまたは複数の
存在しない
時間の複雑さ:
O(N)、
単一文字列タイプの
単一のリスト、コレクション、順序付きコレクション、またはハッシュ・テーブル・タイプの
戻り値:
削除された
【例】:
【第2の方法】:
1つ目の方法の弊害:このような悪いところは毎回1つの接続を確立しなければならなくて、量が小さいならまだ受け入れることができて、量が大きいならば、効率はだめです.
ビルトインLuaインタプリタにより、EVALコマンドを使用してLuaスクリプトを作成できます.
【注】:ただし、この処理方法では、量が多い場合、lua関数unpackに問題が発生し、エラーが発生します
【第2の方式の最適化後】:
【注釈】:まず1つの配列keysを定義し、パターンマッチングのすべての‘Volume:’のkeyを格納し、それからforループし、毎回5000個のkeyを処理し、つまりdelごとに5000個のkeyを処理する.
【第2の方式の弊害】:
KEYS操作はオンラインでは使用禁止です!
Redisは単一スレッドで、量が大きいとkeyを遍歴してブロックされ、他のクライアントは接続できません!
【第3の方法】:
redis 2から8以降はscanコマンドをサポートし始め、モードマッチングは以下の形式で大量のkeyを一括削除することができる.
【結果】:
【参考文献】:Redis【知識点】一括削除指定Key
1.redisルートディレクトリcd/usr/local/redis-2.8.19へのアクセス
2.redisへのログイン:redis-cli-h 127.0.0.1-p 6379(うち、127.0.0.1はサーバのIPアドレス、6379はポート番号)
3.すべてのkey値の表示:keys*
4.指定したインデックスの値を削除する:del key
5.Redisサーバ全体のデータを空にする:flushall
6.現在のライブラリ内のすべてのkey:flushdbを空にする
【第1の方法】:
次は一括削除で「key_」先頭のすべてのredisデータ数は100個です
redis-cli -h (IP ) -p 6379 ( :6379) KEYS key_* | xargs redis-cli (-h (IP ) -p 6379 ( :6379)) del
=>[ ]:(integer) 100[ 100 ]
【上記コマンドのDEL関数の具体的な使い方】
DEL key [key ...]
指定された1つまたは複数の
key
を削除します.存在しない
key
は無視されます.時間の複雑さ:
O(N)、
N
は削除されたkey
の数である.単一文字列タイプの
key
を削除し、時間的複雑度はO(1)である.単一のリスト、コレクション、順序付きコレクション、またはハッシュ・テーブル・タイプの
key
を削除します.時間的複雑度はO(M)、M
は以上のデータ構造内の要素の数です.戻り値:
削除された
key
の数.【例】:
# key
redis> SET name huangz
OK
redis> DEL name
(integer) 1
# key
redis> EXISTS phone
(integer) 0
redis> DEL phone # , key
(integer) 0
# key
redis> SET name "redis"
OK
redis> SET type "key-value store"
OK
redis> SET website "redis.com"
OK
redis> DEL name type website
(integer) 3
【第2の方法】:
1つ目の方法の弊害:このような悪いところは毎回1つの接続を確立しなければならなくて、量が小さいならまだ受け入れることができて、量が大きいならば、効率はだめです.
ビルトインLuaインタプリタにより、EVALコマンドを使用してLuaスクリプトを作成できます.
redis-cli -h(IP ) -p 6379( :6379) --EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 'Volume:*'
【注】:ただし、この処理方法では、量が多い場合、lua関数unpackに問題が発生し、エラーが発生します
'''
(error) ERR Error running script (call to f_e177a091510d969af3b388ee986dbe6658df6b57): @user_script:1: user_script:1: too many results to unpack
'''
【第2の方式の最適化後】:
【注釈】:まず1つの配列keysを定義し、パターンマッチングのすべての‘Volume:’のkeyを格納し、それからforループし、毎回5000個のkeyを処理し、つまりdelごとに5000個のkeyを処理する.
redis-cli -h(IP ) -p 6379( :6379) --EVAL "local keys = redis.call('keys', ARGV[1])
for i=1,#keys,5000
do
redis.call('del', unpack(keys, i, math.min(i+4999, #keys)))
end
return #keys" 0 'Volume:*'
【第2の方式の弊害】:
KEYS操作はオンラインでは使用禁止です!
Redisは単一スレッドで、量が大きいとkeyを遍歴してブロックされ、他のクライアントは接続できません!
【第3の方法】:
redis 2から8以降はscanコマンドをサポートし始め、モードマッチングは以下の形式で大量のkeyを一括削除することができる.
redis-cli -a youpassowrd -n 0 -p 6379 --scan --pattern "Volume:*" | xargs -L 5000 redis-cli -a youpassword -n 0 -p 6379 DEL
【結果】:
'''
/work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 --scan --pattern "Volume:*" | xargs -L 5000 /work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 DEL
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 207
'''
【参考文献】:Redis【知識点】一括削除指定Key