1. 概要:
Redis のハッシュ タイプは、文字列キーと文字列値を持つマップ コンテナーと考えることができます。したがって、この型は値オブジェクトに関する情報を格納するのに非常に適しています。ユーザー名、パスワード、年齢など。ハッシュに含まれるフィールドがほとんどない場合、このタイプのデータが占有するディスク領域も非常に少なくなります。各ハッシュには 4294967295 個のキーと値のペアを保存できます。
2. 関連コマンドリスト:
コマンドプロトタイプ | 時間計算量 | コマンドの説明 | 戻り値 | |
HSETキーフィールド値 | O(1) | キーがそうでない場合は、指定されたキーのフィールド/値ペアを設定します存在する場合、このコマンドはパラメーター内のフィールド/値のペアを持つ新しいキーを作成します。パラメーター内のフィールドがキーに既に存在する場合、その元の値は新しい値で上書きされます。 | 1 は、新しいフィールドを意味します。新しい値が設定されています。0 は、フィールドがすでに存在していることを意味します。元の値を新しい値で上書きします。 。 | |
HEXISTSkey フィールド | O(1) | 指定された Key に指定された Field が存在するかどうかを判定します。 | ||
HLEN key | O(1) | Keyに含まれるFieldの数を取得します。 | ||
HDEL キー フィールド [フィールド ...] | O(N) | 時間計算量の N は、パラメーターで削除されるフィールドの数を表します。パラメータで指定された複数のフィールドを、指定されたキーのハッシュ値から削除します。フィールドが存在しない場合、それらのフィールドは無視されます。キーが存在しない場合は、空のハッシュとして扱われ、0 が返されます。 | ||
HSETNXkey フィールド値 | O(1) | パラメーター内のキーまたはフィールドが存在しない場合にのみ、指定されたキーのフィールド/値のペアを設定します。それ以外の場合、コマンドは操作を実行しません。 | ||
HINCRBYkey フィールドの増加 | O(1) | 指定された Key の指定された Field に関連付けられた Value の値を増加します。キーまたはフィールドが存在しない場合、このコマンドは新しいキーまたはフィールドを作成し、それに関連付けられた値を 0 に初期化して、数値を増やす操作を指定します。このコマンドでサポートされる数値は 64 ビットの符号付き整数です。つまり、増分は負の値になる可能性があります。 | ||
HGETALLkey | O(N) | 時間計算量のNはKeyに含まれるFieldの数を表します。このキーに含まれるすべてのフィールド/値を取得します。戻り値の形式はフィールド、値などです。 | ||
HKEYSkey | O(N) | 時間計算量の N は、キーに含まれるフィールドの数を表します。指定されたキーのすべてのフィールド名を返します。 | フィールドのリスト。 | |
HVALSkey | O(N) | 時間計算量の N は、キーに含まれるフィールドの数を表します。指定されたキーのすべての値の名前を返します。 | 値のリスト。 | |
MGETkey field [field...] | O(N) | 時間計算量の N は、要求されたフィールドの数を表します。パラメータで指定されたフィールドに関連付けられた値のセットを取得します。要求されたフィールドが存在しない場合、その値は nil を返します。キーが存在しない場合、コマンドはそれを空のハッシュとして扱うため、nil のセットを返します。 | リクエストされたフィールドに関連付けられた値のセットを返します。返される順序は、フィールドのリクエスト順序と同じです。 | |
HMSET キーフィールド値 [フィールド値...] | O(N) | 時間計算量の N は、設定されているフィールドの数を表します。パラメータで指定されたフィールド/値のペアをペアごとに設定します。いずれかのフィールドがすでに存在する場合、元の値は新しい値で上書きされます。キーが存在しない場合は、新しいキーを作成し、パラメーターにフィールド/値を設定します。 |
3. コマンド例:
1. HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX:
#在Shell命令行启动Redis客户端程序 /> redis-cli #给键值为myhash的键设置字段为field1,值为stephen。 redis 127.0.0.1:6379> hset myhash field1 "stephen" (integer) 1 #获取键值为myhash,字段为field1的值。 redis 127.0.0.1:6379> hget myhash field1 "stephen" #myhash键中不存在field2字段,因此返回nil。 redis 127.0.0.1:6379> hget myhash field2 (nil) #给myhash关联的Hashes值添加一个新的字段field2,其值为liu。 redis 127.0.0.1:6379> hset myhash field2 "liu" (integer) 1 #获取myhash键的字段数量。 redis 127.0.0.1:6379> hlen myhash (integer) 2 #判断myhash键中是否存在字段名为field1的字段,由于存在,返回值为1。 redis 127.0.0.1:6379> hexists myhash field1 (integer) 1 #删除myhash键中字段名为field1的字段,删除成功返回1。 redis 127.0.0.1:6379> hdel myhash field1 (integer) 1 #再次删除myhash键中字段名为field1的字段,由于上一条命令已经将其删除,因为没有删除,返回0。 redis 127.0.0.1:6379> hdel myhash field1 (integer) 0 #判断myhash键中是否存在field1字段,由于上一条命令已经将其删除,因为返回0。 redis 127.0.0.1:6379> hexists myhash field1 (integer) 0 #通过hsetnx命令给myhash添加新字段field1,其值为stephen,因为该字段已经被删除,所以该命令添加成功并返回1。 redis 127.0.0.1:6379> hsetnx myhash field1 stephen (integer) 1 #由于myhash的field1字段已经通过上一条命令添加成功,因为本条命令不做任何操作后返回0。 redis 127.0.0.1:6379> hsetnx myhash field1 stephen (integer) 0
2. HINCRBY:
#删除该键,便于后面示例的测试。 redis 127.0.0.1:6379> del myhash (integer) 1 #准备测试数据,该myhash的field字段设定值1。 redis 127.0.0.1:6379> hset myhash field 5 (integer) 1 #给myhash的field字段的值加1,返回加后的结果。 redis 127.0.0.1:6379> hincrby myhash field 1 (integer) 6 #给myhash的field字段的值加-1,返回加后的结果。 redis 127.0.0.1:6379> hincrby myhash field -1 (integer) 5 #给myhash的field字段的值加-10,返回加后的结果。 redis 127.0.0.1:6379> hincrby myhash field -10 (integer) -5
3. HGETALL/HKEYS/ HMGET/ HMSET:
#删除该键,便于后面示例测试。 redis 127.0.0.1:6379> del myhash (integer) 1 #为该键myhash,一次性设置多个字段,分别是field1 = "hello", field2 = "world"。 redis 127.0.0.1:6379> hmset myhash field1 "hello" field2 "world" OK #获取myhash键的多个字段,其中field3并不存在,因为在返回结果中与该字段对应的值为nil。 redis 127.0.0.1:6379> hmget myhash field1 field2 field3 1) "hello" 2) "world" 3) (nil) #返回myhash键的所有字段及其值,从结果中可以看出,他们是逐对列出的。 redis 127.0.0.1:6379> hgetall myhash 1) "field1" 2) "hello" 3) "field2" 4) "world" #仅获取myhash键中所有字段的名字。 redis 127.0.0.1:6379> hkeys myhash 1) "field1" 2) "field2" #仅获取myhash键中所有字段的值。 redis 127.0.0.1:6379> hvals myhash 1) "hello" 2) "world"
上記は Redis チュートリアル (4): ハッシュ データ型の内容です。さらに関連する内容については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。