哈希类型中的映射关系叫作field-value
1.设置值
1)hset
hset key field value
- 新哈希字段成功则返回1
- 哈希表中filed已存在且旧值已被新值覆盖则返回0
127.0.0.1:6379> hset myhash key1 name
(integer) 1
127.0.0.1:6379> hset myhash key1 user_name
(integer) 0
127.0.0.1:6379> hget myhash key1
"user_name"
2)hsetnx
hsetnx key field value
- 为哈希表中不存在的字段赋值
- key不存在,则进行创建,返回1
- key存在则不做任何操作,返回0
127.0.0.1:6379> hsetnx myhash key1 user_name
(integer) 0
127.0.0.1:6379> hsetnx myhash key3 class_info
(integer) 1
3)hmset
hmset key field value [field value …]
- 批量设置多个field-value
hmset myhash2 key1 date key2 age key3 num
OK
2.获取值
1)hget
hget key field
127.0.0.1:6379> hget myhash key1
"name"
2)hmget
hmget key field [field …]
- 批量获取field-value
127.0.0.1:6379> hmget myhash key1 key2
1) "name"
2) "addr"
3)hgetall
hgetall key
- 返回所有filed-value值,返回值的长度是哈希表大小的两倍
- 如果哈希元素个数比较多,会存在阻塞redis的可能
- 比较消耗CPU
127.0.0.1:6379> hgetall myhash
1) "key1"
2) "name"
3) "key2"
4) "addr"
4)hvals
hvals key
- 获取所有value
127.0.0.1:6379> hvals myhash
1) "name"
2) "addr
5)hkeys
hkeys key
- 返回指定哈希键所有的field
127.0.0.1:6379> hkeys myhash
1) "key1"
2) "key2"
3.计算
1)hlen
hlen key
- 计算field个数
127.0.0.1:6379> hlen myhash
(integer) 2
2)hstrlen
hstrlen key field
- 计算value的字符串长度
127.0.0.1:6379> hstrlen myhash key1
(integer) 9
4.判断field是否存在
hexists key field
- 存在返回1,不存在返回0
127.0.0.1:6379> hexists myhash key1
(integer) 1
127.0.0.1:6379> hexists myhash key3
(integer) 0
5.设置增量
hincrby key field
hincrbyfloat key field
6.哈希类型命令时间复杂度
命令 | 时间复杂度 |
---|---|
hset | O(1) |
hget | O(1) |
hdel | O(k),field总数 |
hlen | O(1) |
hgetall | O(n),field总数 |
hmget | O(k),field总数 |
hmset | O(k),field总数 |
hexists | O(1) |
hkeys | O(n),field总数 |
hvals | O(n),field总数 |
hsetnx | O(1) |
hincrby | O(1) |
hincrbyfloat | O(1) |
hstrlen | O(1) |