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

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

リリース: 2020-05-06 09:12:44
転載
4356 人が閲覧しました

一括削除のための 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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート