레디 스는 bigkey 스캔 스크립트를 얻을

우리 모두가 알다시피, 큰 키 내부에 매우 위험한 일의 레디 스있다. 때문에 최근 작업 관련 미들웨어 작업 및 검사 방법 bigkey에 대한 때문에 조금 걱정의. 첫째, 알리 클라우드가 제공하는 스크립트 검색에 대해 말씀해
은 https : 콘크리트와 유형? //yq.aliyun.com/articles/117042 t = T1
나는, 15G로 레디 스 메모리에, 키의 수를 스트레스 테스트 스크립트를했다 2KW는, 80K에 40K 사이의 작전은,이 경우, 알리 구름 스크립트 (일 시간이 부족 예상) 완전히 성공, 주로 각 키의 확인 된 경우에 실행할 수 없습니다, 당신은 필요 여러 상호 작용을 레디 스. 다음과 같이 그래서,이 스크립트는 파이프 라인 및 디버그 개체 메서드를 추가하여 수정 된 것을 알고, 스크립트는 다음과 같습니다
수입에서 sys
수입 레디 스이

데프 find_big_key_normal (DB_HOST, db_port, db_password, db_num) :
  클라이언트 = redis.StrictRedis (호스트 = DB_HOST, 포트 = db_port, 암호 = db_password, DB = db_num)
  전 = 0
  온도 = client.scan (커서 = 난 카운트 = 1000)
  J = 0
  동안 온도 [0]> 0 :
    I = 온도 [0]
    J = J + LEN (TEMP [1])
    시도 :
      R = client.pipeline (트랜잭션 = 거짓)
      온도에 대한 K [ 1]
        r.debug_object (K)
      tempA r.execute = ()
      X = 0
      tempA 키 용 :
        길이 = key.get ( "serializedlength")
        ## TYPE = key.get ( "인코딩")
        만약 길이> 10,240 :
          TYPE = client.type (TEMP [1] [X])
          인쇄 온도 [1] [X], 유형, 길이
        X = X + 1
    을 제외 :
      의 "execption 올"인쇄
    온도 = client.scan ( 커서 = 난) = 1000 카운트
 
경우 __name__ == '__main__':
  만약 LEN (sys.argv에) = 4 :!
     잉크 : [0], '호스트 포트 암호'구문 파이썬, sys.argv에
     출구 (1)
  DB_HOST = sys.argv에 [1]
  db_port = sys.argv에 [2]
  db_password = sys.argv에 [3]
  R = redis.StrictRedis (호스트 = DB_HOST 포트 = INT (db_port), 패스워드 = db_password)
  nodecount = 1
  keyspace_info = r.info ( "키 스페이스")
  keyspace_info에서 DB에 대한 :
    인쇄 [dB] keyspace_info '', DB를 '확인'
    find_big_key_normal (DB_HOST, db_port, db_password, db.replace ( "DB", ""))
 
내가 15G로 레디 스 메모리에, 스트레스 테스트 위와 같은 스크립트를했다, 숫자 키 2KW이며,이 경우 40K와 80K에 OPS : 10 분 완벽하게 사용할 수있는 스크립트를 완료합니다.
설명 : 알리 클라우드 스크립트 지원 클러스터 내 스크립트는 우리가 변화를 갈 수 관심이 유일한 독립형 지원입니다.
 
 
여기에 내 자신의 변화입니다
가져 오기 SYS
가져 오기 레디 스는
데프 find_big_key_normal (DB_HOST, db_port, db_password, db_num)
    클라이언트 = redis.StrictRedis (호스트 = DB_HOST 포트 = db_port 암호 = db_password, DB = db_num)
    I = 0
    온도 = (커서 = 내가 client.scan 카운트 = 2 )
    J = 0
    동안 온도 [0]> 0 :
        I = 온도 [0]
        J = J + LEN (TEMP [1])
        시도 :
            R = client.pipeline (트랜잭션 = 거짓)
            온도에 대한 K [1] :
                R .debug_object (K)
            tempA r.execute = ()
            X = 0
            tempA 키 용 :
                길이 = key.get ( "serializedlength")
                경우 길이> 1 :
                    TYPE = client.type (TEMP [1] [X])
                    인쇄 (TEMP [1] [X], 유형, 길이)
                X = X + 1
        을 제외 :
            인쇄 ( "는 예외 온")
        온도 = client.scan (커서 = 1, 2) = 카운트
    J = J + LEN (TEMP [1])
    : 시도
        R = client.pipeline (트랜잭션 = 거짓)
        : 온도 (K)에 [1]의
            r.debug_object (K)
        (= tempA r.execute을 )
        X = 0
        tempA 키 용 :
            길이 = key.get ( "serializedlength")
            경우 길이> 1 :
                TYPE = client.type (TEMP [1] [X])
                인쇄 (TEMP [1] [X], 유형, 길이)
            X = X + 1
    을 제외 :
            인쇄 ( "는 예외 온")
       
__name__ == '__main__'경우 :
    ! (sys.argv에) = 4 렌 경우
        인쇄 ( '용도 : 파이썬, sys.argv에 [0],'호스트 포트 암호 ')
        출구 (1)
    DB_HOST = sys.argv에 [ 1]
    db_port = sys.argv에 [2]
    db_password = sys.argv에 [3]
    R = redis.StrictRedis (호스트 = DB_HOST 포트 = INT (db_port), 패스워드 = db_password)
    nodecount = 1
    keyspace_info = r.info ( "KEYSPACE")
    keyspace_info에 대한 DB :
        인쇄 ( "확인", DB ',', keyspace_info [dB])
        find_big_key_normal (DB_HOST, db_port, db_password, db.replace ( "DB", ""))
 

추천

출처www.cnblogs.com/allenhu320/p/11345247.html