Redis は特定のプレフィックスのキー スクリプト インスタンスを取得します

不言
リリース: 2018-05-18 15:28:26
オリジナル
4177 人が閲覧しました

この記事では、特定のプレフィックスを取得するための Redis の主要なスクリプトに関する関連情報を、サンプル コードを通じて詳細に紹介します。以下で説明しますので、ぜひ一緒に学んでください。

1. 背景

日常のメンテナンスでは、多くのリクエストがある Redis では、キー * が直接ブロックの原因となります。
増分反復にはスキャンを使用し、パイプラインを使用してクエリを使用してインタラクションを減らし、効率を向上させることができます。

2. スキャンコマンドの長所と短所

SCAN コマンドには、SCAN、SSCAN、HSCAN、ZSCAN があります。


SCANはすべてのキーを走査することです


他のSCANコマンドの場合、SCANで選択されたセットです。


SCAN コマンドは増分ループであり、各呼び出しは要素のごく一部のみを返します。したがって、KEYS コマンドには落とし穴はありません。


SCAN コマンドは、0 から移動を開始して 0 で終了するカーソルを返します。

scan 0
1) "655"
2) 1) "test1"
  2) "test2"
ログイン後にコピー

戻り値は配列で、1つは次のサイクルのcursorId、もう1つは要素配列です。 SCAN コマンドは、毎回返される値が順序どおりであることを保証しません。また、同じキーが区別なく複数回返される場合があるため、アプリケーションの処理が必要になります。

さらに、SCANコマンドではCOUNTを指定できます。デフォルトは10です。ただし、これを指定することでどれだけのアイテムが返されるかということを意味するものではありません。これは単なる注意事項であり、それほど多くのアイテムが返されるという保証はありません。

利点:

  • キー空間トラバーサル操作を提供し、カーソル、複雑さ O(1) をサポート、トラバーサル全体で必要なのは O(N) だけです。

  • をサポートします。一度に返されるデータの数を設定しますが、これは単なるヒントであり、場合によってはさらに多くのデータが返されることがあります。

  • 弱い状態では、クライアントはカーソルを維持するだけで済みます。

  • は完全なスナップショットの走査を提供できません。つまり、途中でデータの変更があった場合、その変更に関係する一部のデータが走査されない可能性があります。

毎回返されるデータの数は必ずしも確実ではありません。内部実装に大きく依存します


返されるデータは重複する可能性があり、アプリケーション層は Python スクリプトの実装

  • を処理できる必要があります。 Python にはカプセル化された関数 scan_iter があります -- すべての要素を表示 -- 反復サーバー
  • スクリプトの内容:

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*- 
    #作用:统计某个前缀key的个数,并将其输入到文件
    #使用方法:python scan_redis.py apus* 100
    __author__ = "lcl" 
    import sys
    import redis 
    import os 
    pool=redis.ConnectionPool(host='192.168.225.128',port=6379,db=0) 
    r = redis.StrictRedis(connection_pool=pool) 
    #扫描匹配值,通过sys.argv传参
    match = sys.argv[1]
    #每次匹配数量
    count = sys.argv[2]
    #print match
    #print count
    #总数量
    total = 0
    #扫描到的key输出到文件
    path = os.getcwd()
    #扫描到的key输出的文件
    txt = path+"/keys.txt"
    f = open(txt,"w")
    for key in r.scan_iter(match = match,count = count):
    # f.write("%s %s" % (key,"\n"))
     f.write(key+"\n")
     total = total+1
    f.close
    print "匹配: %s 的数量为:%d " % (match,total)
    ログイン後にコピー

  • 関連する推奨事項:

    Redis を使用した php キャッシュ インスタンス

    以上がRedis は特定のプレフィックスのキー スクリプト インスタンスを取得しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート