Redis-Hash

209 阅读3分钟

key-map 值是Map集合

添加

HSET key field value

设置 key 指定的哈希集中指定字段的值。

如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。

如果字段在哈希集中存在,它将被重写。

127.0.0.1:6379> hset myhash field1  1   field2  2
(integer) 2
127.0.0.1:6379> hmget myhash field1 field2
1) "1"
2) "2"
127.0.0.1:6379> hset myhash field1 1
(integer) 0

hmset key field value [field value.....]

批量添加

如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联

redis> HMSET myhash field1 "Hello" field2 "World"
OK
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"
redis> 

HSETNX key field value

  • 只在 key 指定的哈希集中不存在指定的字段时,设置字段的值。
  • 如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。
  • 如果字段已存在,该操作无效果。
127.0.0.1:6379> hsetnx mybash field5 5
(integer) 1
127.0.0.1:6379> hget mybash field5
"5"
127.0.0.1:6379> hsetnx mybash field5 10
(integer) 0
127.0.0.1:6379> hget mybash field5
"5"

删除

hdel key field [field..]

从 key 指定的哈希集中移除指定的域。在哈希集中不存在的域将被忽略。

如果 key 指定的哈希集不存在,它将被认为是一个空的哈希集,该命令将返回0。

在 2.4及以上版本中 :可接受多个域作为参数。小于 2.4版本 的 Redis 每次调用只能移除一个域

要在早期版本中以原子方式从哈希集中移除多个域,可用 MULTI/EXEC块。

127.0.0.1:6379> hgetall myhash
1) "field1"
2) "1"
3) "field2"
4) "2"
127.0.0.1:6379> hdel myhash field1 field2
(integer) 2
127.0.0.1:6379> hgetall myhash
(empty array)

获取

hkeys key

返回 key 指定的哈希集中所有字段的名字。

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HKEYS myhash
1) "field1"
2) "field2"

hvals key

返回 key 指定的哈希集中所有字段的值。

127.0.0.1:6379> hset mybash f1 1 f2 2 f3 3
(integer) 3
127.0.0.1:6379> hvals mybash
1) "1"
2) "2"
3) "3"

HGET key field

返回 key 指定的哈希集中该字段所关联的值

127.0.0.1:6379> hget myhash field1
"1"

hmget key field [field....]

批量返回 key 指定的哈希集中指定字段的值。

127.0.0.1:6379> hmget myhash field1 field2
1) "1"
2) "2"

hgetall key

返回 key 指定的哈希集中所有的字段和值。

返回值中,每个字段名的下一个是它的值,所以返回值的长度是哈希集大小的两倍

127.0.0.1:6379> hgetall myhash
1) "field1"
2) "1"
3) "field2"
4) "2"

HLEN key

返回 key 指定的哈希集包含的字段的数量。

127.0.0.1:6379> hgetall myhash
1) "field1"
2) "1"
3) "field2"
4) "2"
127.0.0.1:6379> hlen myhash
(integer) 2

HSTRLEN key field

返回hash指定field的value的字符串长度,如果hash或者field不存在,返回0.

127.0.0.1:6379> hstrlen mybash field5
(integer) 1
127.0.0.1:6379> hstrlen mybash field00
(integer) 0

判断

HEXISTS key field

返回hash里面field是否存在

  • 1 hash里面包含该field。
  • 0 hash里面不包含该field或者key不存在。
127.0.0.1:6379> hexists myhash field1
(integer) 1
127.0.0.1:6379> hexists myhash field3
(integer) 0

自增 自减

HINCRBY key field increment

增加 key 指定的哈希集中指定字段的数值

  • 如果 key 不存在,会创建一个新的哈希集并与 key 关联。
  • 如果字段不存在,则字段的值在该操作执行前被设置为 0

HINCRBY 支持的值的范围限定在 64位 有符号整数

127.0.0.1:6379> hset mybash f3 3
(integer) 1
127.0.0.1:6379> hincrby mybash f3 5
(integer) 8
127.0.0.1:6379> hincrby mybash f3 5
(integer) 13
127.0.0.1:6379> hincrby mybash f3 -10
(integer) 3
127.0.0.1:6379> 

HINCRBYFLOAT key field increment

为指定key的hash的field字段值执行float类型的increment加

如果field不存在,则在执行该操作前设置为0.

如果出现下列情况之一,则返回错误:

  • field的值包含的类型错误(不是字符串)。
  • 当前field或者increment不能解析为一个float类型。
127.0.0.1:6379> hset mybash f4 4.5
(integer) 1
127.0.0.1:6379> hincrbyfloat mybash f4 -10
"-5.5"
127.0.0.1:6379>