ホームページ >データベース >Redis >一括削除のための Redis コマンドの概要

一括削除のための Redis コマンドの概要

尚
転載
2020-05-06 09:12:444482ブラウズ

一括削除のための Redis コマンドの概要

redis はバッチ削除を実装します:

1. Redis ルート ディレクトリ cd /usr/local/redis-2.8.19

2. ログにアクセスします。 in to redis : redis-cli -h 127.0.0.1 -p 6379 (127.0.0.1 はサーバーの IP アドレスとして記述でき、6379 はポート番号です)

3. すべてのキー値を表示します。 :keys *

4. 指定したインデックスの値を削除します: del key

5. Redis サーバー全体のデータをクリアします: flashall

6. すべてのキーをクリアします現在のライブラリ内:flushdb

[最初の方法]:

以下は、「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 つ以上のキーを削除します。

存在しないキーは無視されます。

時間計算量:

O(N)、N は削除されたキーの数です。

単一の文字列型キーを削除します。時間計算量は O(1) です。

単一のリスト、セット、順序付きセット、またはハッシュ テーブル タイプのキーを削除します。時間計算量は O(M) です。M は上記のデータ構造内の要素の数です。

戻り値:

削除されたキーの数。

[例]:

#  删除单个 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 つ目の方法のデメリット: 毎回接続を確立する必要がありますが、その点は問題ありません。量が多ければ良いのですが、量が多いと効率が悪くなります。

組み込みの Lua インタープリターを介して、EVAL コマンドを使用して Lua スクリプトを処理できます:

redis-cli -h(IP地址) -p 6379(端口号:6379) --EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 'Volume:*'

[注]: ただし、この処理方法では、次の場合に lua 関数の解凍で問題が発生します。ボリュームが大きい場合、エラーが報告されます

'''
(error) ERR Error running script (call to f_e177a091510d969af3b388ee986dbe6658df6b57): @user_script:1: user_script:1: too many results to unpack
'''

[2 番目の方法の最適化後]:

[注]: まず、すべてのパターン マッチング キーを格納する配列キーを定義します。 「ボリューム:」キーで終わり、次に for ループで毎回 5000 個のキーを処理します。つまり、毎回 5000 個のキーを削除します。

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 はシングルスレッドです。ボリュームが大きい場合、キーが走査され、ブロッキングが発生するため、他のクライアントは接続できなくなります。

[3つ目の方法]:

redis2.8からscanコマンドがサポートされ、以下のようなパターンマッチングで大量のキーを一括削​​除することができます

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 の詳細については、

redis 入門チュートリアル 列に注目してください。

以上が一括削除のための Redis コマンドの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。