Redisデータベース:『Redis実戦』(Redis in Action)学習ノート第3章Redisコマンド

5843 ワード

前に書く:
第3章では、第1章と第2章では見られなかったRedisコマンドについて説明します.これらのコマンドは、既存の例に基づいてより複雑なプログラムを構築し、自分が直面している問題をよりよく解決する方法を学ぶのに役立ちます.この章では、クライアントを使用してRedisサーバと簡単にやり取りし、コマンドの使い方を説明します.この章では、私のコード環境はすべてPython 3.6で、注釈を追加して読者の理解を容易にするために、私は原文をコンソールで実行するコードをpythonファイルに書いて実行します.
この章の内容:
  • 文字列コマンド、リストコマンドおよび集合コマンド
  • ハッシュコマンドおよび整列集合コマンド
  • 発行コマンドと購読コマンド
  • その他のコマンド
  • 3.1文字列
    前の記事では、Redisの文字列はバイトからなるシーケンスであり、多くの言語の文字列とは明らかな違いはありません.Redisでは、文字列は次の3種類の値を格納できます.
  • バイト列(byte string)
  • 整数-Redisの整数値範囲はシステムの長い整数範囲と一致し、32/64ビットシステムでは32/64ビット符号付き整数
  • である.
  • 浮動小数点数-取値範囲と精度はIEEE 754規格の二重精度浮動小数点数と同じである.

  • コマンド#コマンド#
    使用例と説明
    INCR
    INCR key-name-キーが格納されている値に1を加算
    DECR
    DECR key-name-キーが格納されている値から1を減算
    INCRBY
    INCRBY key-name amount--キーに格納された値に整数amountを加算
    DECRBY
    DECRBY key-name amount-キーに格納されている値から整数amountを減算
    INCRBYFLOAT
    INCRBYFLOAT key-name amount--キーに格納された値に浮動小数点数amountを加算します.このコマンドはRedis 2.6以上のバージョンで使用できます.
    いくつかの例を見てみましょう.
    import redis
    
    conn = redis.Redis()
    # None,          key
    print(conn.get('key'))
    # 1,                              ,       0   , 0+1 = 1
    print(conn.incr('key'))
    # 16
    print(conn.incr('key', 15))
    # 11
    print(conn.decr('key', 5))
    # 11
    print(conn.get('key'))
    # True,    'key'            '13'
    print(conn.set('key', '13'))
    # 14,    '13'    13,      
    print(conn.incr('key'))
    

    また、Redisは、バイト列の一部のコンテンツの読み取りまたは書き込みを行う動作も有する.
    コマンド#コマンド#
    使用例と説明
    APPEND
    APPEND key-name value-所与のキーkey-nameの現在格納されている値の末尾に値valueを追加
    GETRANGE
    GETRANGE key-name start end:startとendを含むオフセットstartからオフセットendの範囲内のすべての文字からなる文字列を取得します.
    SETRANGE
    SETRANGE key-name offset value-オフセット量startから始まるサブストリングを所定値に設定
    GETBIT
    GETBIT key-name offset-バイト列をバイナリビット列(bit string)と見なし、ビット列におけるオフセット量offsetのバイナリビットの値を返す
    SETBIT
    SETBIT key-name offset value-バイト列をバイナリビット列(bit string)と見なし、ビット列におけるオフセット量offsetのバイナリビットの値をvalueとする
    BITCOUNT
    BITCOUNT key-name[start end]:バイナリビット列内の値が1のバイナリビット数を統計し、オプションのstartオフセット量とendオフセット量が与えられた場合、オフセット量指定範囲内のバイナリビットのみを統計する
    BITOP
    BITOP operation dest-key key-name [key-name ...] ——1つ以上のバイナリビット列について、AND、OR、XOR、NOTを含む任意のビット演算を行い、算出した結果をdest-keyキーに保存する
    SETRANGEまたはSETBITコマンドを使用して文字列を書き込む場合、文字列の現在の長さが書き込みの要件を満たすことができない場合、Redisは自動的に空のバイト(null)を使用して文字列を必要な長さに拡張し、書き込みまたは更新操作を実行します.一方、GETRANGEを使用する場合、長さを超えたデータは空欄とみなされ、GETBITを使用する場合、長さを超えたバイナリビットは0とみなされる.
    いくつかの例を見てみましょう.
    import redis
    
    conn = redis.Redis()
    # 6, APPEND               
    print(conn.append('new-string-key', 'hello '))
    # 12
    print(conn.append('new-string-key', 'world!'))
    # "lo wo",             
    print(conn.getrange('new-string-key', 3, 7))
    # 12, SETRANGE               
    print(conn.setrange('new-string-key', 0, 'H'))
    # 12
    print(conn.setrange('new-string-key', 6, 'W'))
    # Hello World!
    print(conn.get('new-string-key'))
    # 25
    print(conn.setrange('new-string-key', 11, ', how are you?'))
    # Hello World, how are you?,     SETRANGE              ,          
    print(conn.get('new-string-key'))
    # 0, SETBIT                ,   'another-key'       01
    print(conn.setbit('another-key', 2, 1))
    # 0, SETBIT                ,   'another-key'       0100001
    print(conn.setbit('another-key', 7, 1))
    # !, 0100001       33,   33    '!'
    print(conn.get('new-string-key'))
    

    3.2リスト
    Redisのリストでは、シーケンスの両端から要素をプッシュまたはポップアップし、リスト要素を取得し、さまざまな一般的なリスト操作を実行できます.最初に、リストは、タスク情報、最近閲覧した記事、または一般的な連絡先情報を格納するために使用することもできます.
    コマンド#コマンド#
    使用例と説明
    RPUSH
    RPUSH key-name value [value ...] ——リストの右端に1つ以上の値を押し込む
    LPUSH
    LPUSH key-name value [value ...] ——1つ以上の値をリストの左端に押し込む
    RPOP 
    RPOP key-name-リストの最右端の要素を削除して返します
    LPOP
    LPOP key-name-リストの左端の要素を削除して返します
    LINDEX
    LINDEX key-name offset-リスト内のオフセット量offsetの要素を返します
    LRANGE
    LRANGE key-name start end-startオフセットからendオフセットまでのリスト内のすべての要素を返します.startおよびend
    LTRIM
    LTRIM key-name start end-リストをトリミングし、startオフセットからendオフセットの範囲内の要素のみを保持します.オフセットがstartの要素とオフセットがendの要素も保持されます.
    いくつかの例を見てみましょう.
    import redis
    
    conn = redis.Redis()
    # 1,                  
    print(conn.rpush('list-key', 'last'))
    # 2
    print(conn.lpush('list-key', 'first'))
    # 3
    print(conn.rpush('list-key', 'new last'))
    # ['first', 'last', 'new last'],      0        ,        
    print(conn.lrange('list-key', 0, -1))
    # 'first'
    print(conn.lpop('list-key'))
    # 'last'
    print(conn.lpop('list-key'))
    # ['new last']
    print(conn.lrange('list-key', 0, -1))
    # 4
    print(conn.rpush('list-key', 'a', 'b', 'c'))
    # ['new last', 'a', 'b', 'c']
    print(conn.lrange('list-key', 0, -1))
    # True,             
    print(conn.ltrim('list-key', 2, -1))
    # ['b', 'c']
    print(conn.lrange('list-key', 0, -1))

    いくつかのリストコマンドは、1つのリストから別のリストに要素を移動するか、ブロック実行コマンドを実行するクライアントが他のクライアントがリストに要素を追加したことを知っているまで、次のようにします.
    コマンド#コマンド#
    使用例と説明
    BLPOP
    BLPOP key-name [key-name ...] timeout-最初の空でないリストから左端にある要素をポップアップするか、timeout秒以内にブロックしてポップアップ可能な要素が現れるのを待つ
    BRPOP
    BRPOP key-name [key-name ...] timeout:最初の空でないリストから最右端にある要素をポップアップするか、timeout秒以内にポップアップ可能な要素の出現をブロックして待機します.
    RPOPLPUSH
    RPOPLPUSH source-key dest-key--source-keyリストから最右端にある要素をポップアップし、この要素をdest-keyの左端に押し込み、ユーザーにこの要素を返します.
    BRPOPLPUSH
    BRPOLPUSH source-key dest-key timeout--source-keyリストから最右端にある要素をポップアップし、dest-keyの左端に押し込み、ユーザーにこの要素を返します.source-keyが空の場合、timeout秒以内にブロックされ、ポップアップ可能な要素が現れるのを待つ
    いくつかの例を見てみましょう.
    未完待機