redisベスト04セット(集合データ型set、秩序集合sortedset)

27577 ワード

redisベスト04セット(集合データ型set、秩序集合sortedset)


pythonラーニングディレクトリ転送ゲート

文書ディレクトリ

  • redisベスト04セット(集合データ型set、秩序集合sortedset)
  • ビットマップ操作bitmap
  • Hashハッシュデータ型
  • 集合データ型(set)
  • 秩序集合(sortedset)
  • ビットマップ操作bitmap


    定義#テイギ#
    1、           ,           
    2、              512M     ,   :2^32
    # 1MB = 1024KB
    # 1KB = 1024Byte(  )
    # 1Byte = 8bit( )
    
     000000000000000
        
     6 1  6 2  ...
    

    強勢点
             ,      。     1 2 8          ,   MacBookPro ,      “    ”       50ms,   16MB  
    

    SETBITコマンド
  • 説明:ある位置のバイナリ値
  • を設定する
  • 構文:SETBIT key offset value
  • パラメータ:offset-オフセット量0からvalue-0または1
  • 例:
  • #       0  
    127.0.0.1:6379> SET mykey ab
    OK
    127.0.0.1:6379> GET mykey
    "ab"
    127.0.0.1:6379> SETBIT mykey 0 1
    (integer) 0
    127.0.0.1:6379> GET mykey
    "\xe1b"
    127.0.0.1:6379> 
    

    GETBITコマンド
  • 説明:あるビットの値
  • を取得する
  • 構文:GETBIT key offset
  • 例:
  • 127.0.0.1:6379> GETBIT mykey 3
    (integer) 0
    127.0.0.1:6379> GETBIT mykey 0
    (integer) 1
    127.0.0.1:6379> 
    

    BITCOUNTコマンド
  • は、統計キーに対応する値のうち1
  • がどれだけあるかを示す.
  • 構文:BITCOUNT key start end
  • パラメータ:start/endはバイトインデックス
  • を表します.
  • 例:
  • 127.0.0.1:6379> SET mykey1 ab
    OK
    127.0.0.1:6379[4]> BITCOUNT mykey
    (integer) 6
    127.0.0.1:6379[4]> BITCOUNT mykey 0 0
    (integer) 3
    
    

    シーンの適用
    #            (      )
    	    key,      offset,     1
    #   
    	     user1:login    ,   130   
    	SETBIT user1:login 0 1 
    	SETBIT user1:login 29 1
    	BITCOUNT user1:login
    

    コード実装
    r.setbit('user1:login', 0, 1)
    r.bitcount('user1:login')
    

    ハッシュデータ型

  • 定義
  • 1、 field    value       redis_key {field:value,field1:value1}
    2、field value      
    3hash     2^32-1    
    
  • の利点
  • 1-15122:value    64hash:
       hk1  {'username':'guoxiaonao', 'age': '18'}
       
       string:
       hk1_username: 'guoxiaonao'
       hk1_age : '18'
        
        
       string:
       hk1 : 'guoxiaonao_18_  _xxxxx'
    
    2
  • 欠点(hashに適合しない場合)
  • 1,       :               ,               
    2
  • 基本コマンド操作
  • # 1、      
    HSET key field value
    HSETNX key field value
    # 2、      
    HMSET key field value field value
    # 3、      
    HLEN key
    # 4、        (     0)
    HEXISTS key field
    # 5、     
    HGET key field
    # 6、       
    HMGET key field filed
    # 7、        
    HGETALL key
    # 8、       
    HKEYS key
    # 9、     
    HVALS key
    # 10、      
    HDEL key field 
    # 11、               
    HINCRBY key filed increment
    # 12、                
    HINCRBYFLOAT key field increment
    

    python操作hash
    # 1、         ,     
    hset(name, key, value) 
    # 2、           ,        
    hget(name, key)
    # 3、      (     )  ,     
    hmset(name, mapping)
    # 4、      (     )  
    hmget(name, keys)
    # 5、                ,      
    hgetall(name)
    # 6、            ,      
    hkeys(name)
    # 7、           
    hdel(name, *keys)
    

    Pythonコードhashハッシュ
    import redis
    
    r = redis.Redis(host='127.0.0.1', port=6379, db=0)
    
    #r.hset('pyh1', 'uname', 'wangweichao')
    #r.hset('pyh1', 'age', 63)
    # {b'uname': b'wangweichao', b'age': b'63'}
    #print(r.hgetall('pyh1'))
    
    #r.hmset('pyh2', {'uname':'guoxiaonao', 'age':18})
    #print(r.hgetall('pyh2'))
    
    print(r.hkeys('pyh2'))
    print(r.hvals('pyh1'))
    

    ≪シーンの適用|Apply Scene|oem_src≫:≪ユーザー次元データ統計|User Dimension Data Statistics|oem_src≫
          
            :   、   、     、   
          key,     field,value    
            5 
    	 HSET user:10000 fans 5
    	 HINCRBY user:10000 fans 1
    

    適用シーン:キャッシュ-redis+mysql+hashの組合せ使用
    mysql userテーブルusername age desc sign
    redis - user_guoxiaonao {desc:xxxx,sign:xxxx}
    amysite 1アプリケーションuser
    userテーブル-username(11)age
    1,ユーザ個人情報の表示-キャッシュhash-/user/detail/ユーザid-GET
    usernameとageの表示
    ​ return username is %s age is %s
    2,ユーザ更新個人情報-GETクエリ文字列/user/update/1?age=33
    ≪データベースの更新|Database Update|Eas≫-キャッシュの削除
    ヒント:redis接続オブジェクトを直接ビュー関数で初期化すればよい
    ビュー関数におけるグローバル変数r=redis.Redis…
  • 原理
              
    1、 redis         
    2、redis     , mysql  ,    redis
    3
  • コード実装
    
    
  • コレクションデータ型(set)

  • 特徴
  • 1、  、  
    232^32-1   
    
  • 基本コマンド
  • # 1、          ,    ;                
    SADD key member1 member2
    # 2、         
    SMEMBERS key
    # 3、          ,         
    SREM key member1 member2
    # 4、      
    SISMEMBER key member
    # 5、              ,   1 
    SRANDMEMBER key [count]
    # 6、    
    SPOP key [count]
    # 7、          ,        ,         
    SCARD key
    # 8、              
    SMOVE source destination member
    
    # 9、  (number1 1 2 3 number2 1 2 4    3)
    SDIFF key1 key2 
    # 10、           
    SDIFFSTORE destination key1 key2
    
    # 11、  
    SINTER key1 key2
    SINTERSTORE destination key1 key2
    
    # 11、  
    SUNION key1 key2
    SUNIONSTORE destination key1 key2
    

    ケース:新浪微博の共通の関心
    #   :              ,                    
    #   :                ,     
    #   :
    	user001 = {'peiqi','qiaozhi','danni'}
    	user002 = {'peiqi','qiaozhi','lingyang'}
      
    user001 user002      :
    	SINTER user001 user002
    	   : {'peiqi','qiaozhi'}
    

    python操作set
    import redis
    
    r = redis.Redis(host='127.0.0.1', port=6379, db=0)
    
    #r.sadd('pys1', 'Jack', 'qiaozhi')
    #print(r.smembers('pys1'))
    
    #print(r.spop('pys1'))
    
    # r.sadd('pys2', 'a', 'b')
    # r.sadd('pys3', 'b', 'c')
    # r.sadd('pys4', 'b', 'c', 'd')
    # print(r.sinter('pys2', 'pys3', 'pys4'))
    print(r.sunionstore('pys5', 'pys2', 'pys3', 'pys4'))
    print(r.smembers('pys5'))
    

    秩序集合(sortedset)

  • 特徴
  • 1、  、  
    2、        
    3、               (score),                    (      )
    4、    2^32-1  
    
  • の例は、果物の価格を保存する秩序ある集合
  • である.
    スコア
    2.0
    4.0
    6.0
    8.0
    10.0
    要素
    すいか
    ぶどう
    マンゴー
    バナナ
    りんご
    従業員の給料を保存した秩序ある集合
    スコア
    6000
    8000
    10000
    12000
    要素
    lucy
    tom
    jim
    jack
    いくつかの技術書を読んでいる人の数を保存しています
    スコア
    300
    400
    555
    666
    777
    要素
    コアプログラミング
    アヴァンティ
    ビンラディン
    アームストロング
    ビル・ゲイツ
  • 秩序化集合共通コマンド
  • #                                
    zadd key score member
    #         (  )
    zrange key start stop [withscores]
    #         (  )
    zrevrange key start stop [withscores]
    #          
    zscore key member
    
    #         
    # offset :        
    # count :     
    #     :      zrangebyscore fruits (2.0 8.0
    zrangebyscore key min max [withscores] [limit offset count]
    #     10   ,   5      : 
    # limit 40 10    (m-1)*n  n
    # MySQL:     10   ,   5    
    # limit 40,10
    # limit 2,3     :  3 4 5   
    
    #     
    zrem key member
    #         
    zincrby key increment member
    #       
    zrank key member
    #         
    zrevrank key member
    #           
    zremrangebyscore key min max
    #          
    zcard key
    #             
    zcount key min max
    zcount salary 6000 8000 
    zcount salary (6000 8000# 6000
    zcount salary (6000 (8000#6000
    #   
    zunionstore destination numkeys key [weights    ] [AGGREGATE SUM|MIN|MAX]
    # zunionstore salary3 2 salary salary2 weights 1 0.5 AGGREGATE MAX
    # 2      ,weights     1 salary,  0.5 salary2  ,          AGGREGATE
                         
    #   :     ,       
    zinterstore destination numkeys key1 key2 weights weight AGGREGATE SUM(  )|MIN|MAX
    

    python操作sorted set
    import redis
    
    r = redis.Redis(host='127.0.0.1', port=6379, db=0)
    
    r.zadd('pyz1',{'tom':6000, 'jim':3000, 'jack':12000})
    #[(b'jim', 3000.0), (b'tom', 6000.0), (b'jack', 12000.0)]
    #print(r.zrange('pyz1', 0, -1, withscores=True))
    #print(r.zrangebyscore('pyz1',3000, 12000,start=1, num=2))
    
    #print(r.zrank('pyz1','jim'))
    #[(b'jim', 3000.0), (b'tom', 6000.0), (b'jack', 12000.0)]
    #print(r.zcount('pyz1', '(6000', 12000))
    
    
    #r.zadd('pyz2', {'jim':8000,'gxn':10000})
    r.zinterstore('pyz3', ('pyz1','pyz2'), aggregate='max')
    print(r.zrange('pyz1', 0, -1, withscores=True))
    print(r.zrange('pyz2', 0, -1, withscores=True))
    print(r.zrange('pyz3', 0, -1, withscores=True))
    
    

    ここで、編集者は非常に誠実にあなたがこの文章を読むことができることに感謝して、もしあなたの技術の学習に対して役に立つならば、あなたが貴重な3連撃【いいね、コレクション、分かち合います】を献上することができることを望んで、あなたの励まし、評論と提案は私の最大の動力です!私はインターネット業界で粘り強く戦っているkです!オリー