ホームページ  >  記事  >  バックエンド開発  >  Redis は特定のプレフィックスのキー スクリプト インスタンスを取得します

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

不言
不言オリジナル
2018-05-18 15:28:264176ブラウズ

この記事では、特定のプレフィックスを取得するための 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。