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個です
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