ホームページ  >  記事  >  データベース  >  Redis での String データ型の例の分析

Redis での String データ型の例の分析

WBOY
WBOY転載
2023-06-03 10:47:49840ブラウズ

概要:

文字列型は Redis の最も基本的なデータ ストレージ型です。Redis ではバイナリ セーフです。つまり、この型は JPEG 画像データなどのあらゆる形式のデータを受け入れることができます。またはJsonオブジェクトの記述情報などRedisにおける文字列型値の最大容量は512MBです。

関連コマンド リスト:

DECR 指定されたキーの値をアトミックに 1 ずつ減分します。キーが存在しない場合、その初期値は 0 で、decr 後の値は -1 になります。 Value の値が Hello などの整数型ではない場合、操作は INCRDECRBYINCRBYGET指定されたキーの値を取得します。キーに関連付けられた値が文字列型でない場合、GET コマンドは文字列値の取得にしか使用できないため、Redis はエラー メッセージを返します。 キーに関連する値。キーが存在しない場合は、nil が返されます。 SET指定された文字列値を保持するキーを設定します。すでに存在する場合、元の値は上書きされます。 常に「OK」を返します。 GETSETキーを指定された値に原子的に設定し、同時にキーを返します。元の値を計測します。 GET コマンドと同様に、このコマンドは文字列値のみを処理できます。それ以外の場合は、Redis が関連するエラー情報を提供します。 キーの元の値を返します。キーが以前に存在しない場合は、nil を返します。 STRLEN指定されたキーの文字値の長さを返します。値が次の値でない場合は、文字列型、Redis 実行は失敗し、関連するエラー情報が表示されます。 指定されたキーの値の文字長を返します。キーが存在しない場合は、0 を返します。 SETEX 2 つの操作をアトミックに完了します。1 つは、キーの値を次のように設定することです。文字列を指定して、Redis サーバー内でのキーの生存時間 (秒) を設定します。このコマンドは主に Redis をキャッシュサーバーとして使用する場合に使用されます。 SETNX指定されたキーが存在しない場合は、設定しますKey は指定された文字列 Value を保持すると判断され、このときの効果は SET コマンドと同等です。逆に、キーがすでに存在する場合、コマンドは何もせずに戻ります。 1 は設定が成功したことを意味し、そうでない場合は 0 を意味します。 SETRANGE SETBIT を設定します指定されたオフセットの BIT 値。この値は 1 または 0 のみです。設定後、このコマンドはオフセットの元の BIT 値を返します。指定されたキーが存在しない場合、このコマンドは新しい値を作成し、指定された GETBITMGETMSETMSETNXN は、指定されたキーの数を表します。このコマンドは、パラメータ内のすべてのキー/値設定操作をアトミックに完了します。その具体的な動作は、SETNX コマンドを複数回繰り返し実行することでわかります。ただし、ここで明確に述べておく必要があるのは、String (string)
コマンド プロトタイプ 時間計算量 コマンドの説明 戻り値
##APPENDO (1) Key がすでに存在する場合、APPEND コマンドはパラメータ Value のデータを既存の Value の末尾に追加します。キーが存在しない場合、APPEND コマンドは新しいキー/値を作成します。 追加後の値の長さ。
O(1) # で失敗し、対応するエラー メッセージが返されます。注: この演算の値の範囲は 64 ビットの符号付き整数です。

価値の減少。

O(1) 指定されたキーの値を原子的に 1 ずつインクリメントします。キーが存在しない場合、その初期値は 0 で、増加後の値は 1 になります。 Value の値を文字列 Hello などの整数値に変換できない場合、操作は失敗し となり、対応するエラー メッセージが返されます。注: この演算の値の範囲は 64 ビットの符号付き整数です。

インクリメントされた Value 値。

O(1) 指定されたキーの値は、デクリメントによってアトミックに減らされます。 。 decrby 実行後、Key が存在しない場合、初期値は 0 となり、その後は -decrement となります。 Value の値を整数値 Hello などに変換できない場合、操作は失敗し、対応するエラー メッセージが返されます。注: この演算の値の範囲は 64 ビットの符号付き整数です。

削減された Value 値。

O(1) 指定されたキーの値をアトミックにインクリメントします。 Key が存在しない場合、その初期値は 0 で、incrby 後の値は増加します。 Value の値を Hello, などの整数値に変換できない場合、操作は失敗し、対応するエラー メッセージが返されます。注: この演算の値の範囲は 64 ビットの符号付き整数です。

増加した Value 値。

O(1)
O(1)
O(1)
O(1)
O(1)
O(1)
O(1) 指定されたキーの文字列値の一部を置き換えます。オフセットから始まる置換長は、コマンドの 3 番目のパラメーター値の文字列長です。オフセットの値がキーの元の値の文字列長より大きい場合、 Redis はValue の文字列長。次に、(オフセット - strlen(value)) 量の 0x00 を埋めて、新しい値を追加します。キーが存在しない場合、このコマンドは元の値の長さが 0 であると想定し、新しい値を追加する前にオフセット文字

0x00 を追加します。文字列値の最大長が 512M であるとすると、オフセットの最大値は 536870911 になります。最後に注意すべき点は、コマンドの実行時に指定されたキーの元の値が失われる場合、長さが増加すると、Redis は置換されたすべての文字列を収容するのに十分なメモリを再割り当てするため、ある程度の影響を受けます。 . パフォーマンスに影響します。

変更された文字列値の長さ。
GETRANGE O(1)

インターセプトされた文字列の長さが非常に短い場合、 can コマンドの時間計算量は O(1) とみなされ、それ以外の場合は O(N) とみなされます。ここで、N はインターセプトされた部分文字列の長さを表します。このコマンドが部分文字列をインターセプトする場合、開始文字 (0 は最初の文字を表します) と終了文字の両方が閉じた間隔で含まれます。終了値が Value の文字長を超える場合、このコマンドは開始文字から始まるすべての文字データのみをインターセプトします。 。

サブストリング
O(1)

オフセットのパラメータの BIT 値を設定します。 Offset が Value の文字長より大きい場合、Redis は Value を拡張し、指定された Offset のパラメータに BIT 値を設定します。中央に追加される BIT 値は 0 です。

最後に必要なのは、オフセット値が 0 より大きくなければならないことです。

指定されたオフセットの BIT の元の値。
O(1) 指定されたオフセット (0 または 1) の BIT の値を返します。このコマンドは、Offset が文字列値の長さを超えると 0 を返すため、空の文字列の場合は常に 0 を返します。 指定されたオフセットの BIT 値。
O(N) N は取得されたキーの数を表します。指定されたすべてのキーの値を返します。いずれかのキーが存在しないか、その値が文字列型でない場合、キーの値は nil を返します。 指定されたキーのセットの値のリストを返します。
O(N) N は、指定されたキーの数を表します。このコマンドは、パラメータ内のすべてのキー/値設定操作をアトミックに完了します。その具体的な動作は、SET コマンドを複数回繰り返し実行することでわかります。 このコマンドは失敗せず、常に OK を返します。
O(N)

このキーのバッチ内のいずれかのキーが既に存在する場合、操作はすべてロールバックされる、つまりすべての変更が有効にならないということです。


append key value if の場合、元の値に値を追加します。キーが存在しないため、追加する代わりに新しいキーと値を作成します

substr key start len はキーをインターセプトし、start から開始して、len の長さをインターセプトします

strlen key は長さを取得しますキー

incr キーは 1 ずつ増加します

decr キーは 1 ずつ減少します

#incrby キー num がキーを増加させ、num

decrby キー num がキーを減少させます、num

## を減らします #getrange key start end は文字キー [start, end] をインターセプトし、ヘッダーには末尾も含まれます

setrange key offset value はオフセット位置のデータを値 (オフセットはキーのインデックスです)

setex キーの秒の値はキーの有効期限を設定します

キーが存在しない場合は、setnx コマンドを実行するとキーと値が設定されます。キーがすでに存在する場合、setnx コマンドは失敗し、値を再度追加することはできません

mset key1 value key2 value 複数のキーと値を一度に設定します

mget key1 key2 値を取得します複数のキーを一度に設定

msetnx key1 value key2 value 複数のキーと値を一度に設定 value いずれかのキーが存在する場合、すべての作成は失敗します (原子性)

getset key value 存在しない場合は nil を取得して値を設定、取得前の値を参照している場合は以降の値を設定 (更新操作) )

###############################################
127.0.0.1:6379> set key1 v
OK
127.0.0.1:6379> get key1
"v"
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> exists key1
(integer) 1
127.0.0.1:6379> append key1 v1
(integer) 3
127.0.0.1:6379> get key1
"vv1"
127.0.0.1:6379> substr key1 0 3
"vv1"
127.0.0.1:6379> strlen key1
(integer) 3
127.0.0.1:6379> append key1 "hello1"
(integer) 9
127.0.0.1:6379> substr key1 1 2
"v1"
127.0.0.1:6379> substr key1 1 1
"v"
127.0.0.1:6379> append key2 "lisi"
(integer) 4
127.0.0.1:6379> get key2
"lisi"
###############################################
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> incrby views 10
(integer) 10
127.0.0.1:6379> decrby views 5
(integer) 5
####################################
127.0.0.1:6379> set key1 "hello,world"
OK
127.0.0.1:6379> GETRANGE key1 0 3
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1
"hello,world"
127.0.0.1:6379> SETRANGE key2 3 2
(integer) 7
127.0.0.1:6379> get key2
"abc2efg"
########################################
127.0.0.1:6379> setex key3 30 hello
OK
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> ttl key3
(integer) 24
127.0.0.1:6379> SETNX mykey redis
(integer) 1
127.0.0.1:6379> keys *
1) "mykey"
2) "key2"
3) "key1"
127.0.0.1:6379> SETNX mykey "MongoDB"
(integer) 0
127.0.0.1:6379> get mykey
"redis"
####################################
127.0.0.1:6379> mset k1 v1 k2 v2
OK
127.0.0.1:6379> mget k1 k2
1) "v1"
2) "v2"
127.0.0.1:6379> MSETNX k1 v1 k3 v3
(integer) 0
# 对象
# 这里的key是一个巧妙的设计 user:{id}:{filed} 
127.0.0.1:6379> msetnx user:1:name "zhangsan" user:1:age 2
(integer) 1
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
127.0.0.1:6379> set article:101:views 0
OK
127.0.0.1:6379> incr article:101:views
(integer) 1
127.0.0.1:6379> get article:101:views
"1"
###########################################################
127.0.0.1:6379> getset db redis
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db 10
"redis"

String 同様のシナリオ: value文字列に加えて数値を指定することもできます。

#Counter

  • 複数のユニットの数をカウントします uid:1923:follow 0

  • ファンの数

  • オブジェクト キャッシュ ストレージ

以上がRedis での String データ型の例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。