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以上のバージョンで使用できます.
いくつかの例を見てみましょう.
また、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とみなされる.
いくつかの例を見てみましょう.
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の要素も保持されます.
いくつかの例を見てみましょう.
いくつかのリストコマンドは、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秒以内にブロックされ、ポップアップ可能な要素が現れるのを待つ
いくつかの例を見てみましょう.
未完待機
第3章では、第1章と第2章では見られなかったRedisコマンドについて説明します.これらのコマンドは、既存の例に基づいてより複雑なプログラムを構築し、自分が直面している問題をよりよく解決する方法を学ぶのに役立ちます.この章では、クライアントを使用してRedisサーバと簡単にやり取りし、コマンドの使い方を説明します.この章では、私のコード環境はすべてPython 3.6で、注釈を追加して読者の理解を容易にするために、私は原文をコンソールで実行するコードをpythonファイルに書いて実行します.
この章の内容:
前の記事では、Redisの文字列はバイトからなるシーケンスであり、多くの言語の文字列とは明らかな違いはありません.Redisでは、文字列は次の3種類の値を格納できます.
コマンド#コマンド#
使用例と説明
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秒以内にブロックされ、ポップアップ可能な要素が現れるのを待つ
いくつかの例を見てみましょう.
未完待機