Redis Hashes实现了字符串字段(fields)到字符串值(value)之间的映射,尤其适用于那些拥有多个字段的对象。比如,一个用户对象拥有诸如姓名、性别、年龄等字段,使用Hashes来存储它们会很方便。
Hashes对象占用内存空间较小,因此一个Hash对象能够存储很多数据:一般能够存储超过40亿个field-value对。
1.HMSET/HMGET
HMSET将指定字段设置成指定的值,可以同时设置多个field-value对;HMGET返回指定字段对应的值,可以同时获取多个field的value。
(1)命令格式
1 2 |
HMSET key field value [field value ...] HMGET key field [field ...] |
(2)示例
1 2 3 4 5 |
127.0.0.1:6379> HMSET user:007 username leo birthday 2018 verified 1 OK 127.0.0.1:6379> HMGET user:007 username birthday 1) "leo" 2) "2018" |
类似的,还有HSET和HGET命令,这两个命令一次只能设置或返回一个field对应的value。
2.HGETALL/HVALS/HKEYS
HGETALL返回hash对象所有field-value对;HKEYS返回所有的fields,HVALS返回所有的values。
(1)命令格式
1 2 3 |
HGETALL key HKEYS key HVALS key |
(2)示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
127.0.0.1:6379> HMSET user:007 username leo birthday 2018 verified 1 OK 127.0.0.1:6379> HGETALL user:007 1) "username" 2) "leo" 3) "birthday" 4) "2018" 5) "verified" 6) "1" 127.0.0.1:6379> HKEYS user:007 1) "username" 2) "birthday" 3) "verified" 127.0.0.1:6379> HVALS user:007 1) "leo" 2) "2018" 3) "1" |
3.HINCRBY/HINCRBYFLOAT
这两个命令分别用来增加hash对象field的value值,不同点在于,value值的类型分别为整型和浮点型。
(1)命令格式
1 2 |
HINCRBY key field increment HINCRBYFLOAT key field increment |
(2)示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
127.0.0.1:6379> HSET myhash field 5 (integer) 1 127.0.0.1:6379> HINCRBY myhash field 1 (integer) 6 127.0.0.1:6379> HINCRBY myhash field -1 (integer) 5 127.0.0.1:6379> DEL myhash (integer) 1 127.0.0.1:6379> HSET myhash field 10.50 (integer) 1 127.0.0.1:6379> HINCRBYFLOAT myhash field 0.1 "10.6" 127.0.0.1:6379> HINCRBYFLOAT myhash field -5 "5.6" |
4.HDEL/HEXISTS
HDEL用来删除一个或多个hash对象的field;HEXISTS命令用来判断hash对象的field是否存在。
(1)命令格式
1 2 |
HDEL key field [field ...] HEXISTS key field |
(2)示例
1 2 3 4 5 6 7 8 9 10 |
127.0.0.1:6379> DEL myhash (integer) 1 127.0.0.1:6379> HSET myhash field1 "foo" (integer) 1 127.0.0.1:6379> HEXISTS myhash field1 (integer) 1 127.0.0.1:6379> HDEL myhash field1 (integer) 1 127.0.0.1:6379> HEXISTS myhash field1 (integer) 0 |
5.HLEN/HSTRLEN
HLEN命令返回hash对象中的field个数;HSTRLEN命令返回hash对象中某个field对应的value字符串的长度。
(1)命令格式
1 2 |
HLEN key HSTRLEN key field |
(2)示例
1 2 3 4 5 6 |
127.0.0.1:6379> HMSET myhash field1 leo field2 male OK 127.0.0.1:6379> HLEN myhash (integer) 2 127.0.0.1:6379> HSTRLEN myhash field1 (integer) 3 |
参考:
https://redis.io/topics/data-types-intro
https://redis.io/commands#hash