一.概念
在Redis中,也提供了和其他语言一样键值对结构的hash类型,Redis的hash类型的键值本身又是一个键值对结构.
如:
|
key |
value |
|
|
user:1 |
key |
value |
|
code |
01 |
|
|
name |
shl |
|
|
user:2 |
key |
value |
|
code |
02 |
|
|
name |
zyc |
|
二.命令
2.1 设置值
命令:hset key field value
例如: hset user:1 name shl
返回:0
2.2 批量设置值
命令:hmset key field1 value1 field2 value2 …
例如:
hmset user:1 name shl age 32
返回 ok
2.3 获取值
命令:hget key field
例如:hset user:1 name shl
hget user:1 name
返回shl
2.4 批量获取值
命令:hmget key field1 field2
例如:hmset user:1 name shl age 32
hmget user:1 name age
返回: shl
32
2.5 删除field
命令:hdel key field
例如:hset user:2 name zyc
hdel user:2 name
返回: 1 表示删除成功
2.6 计算field的个数
命令:hlen key
例如:hmset user:3 name shl age 32 city tianjin
hlen user:3
返回:3
2.7 判断field是否存在
命令:hexists key field,包含返回1,不包含返回0.
例如hset user:2 name zyc
hexistsuser:2 name
返回:1
2.8 获取指定key的所有field
命令:hkeys key 获取指定key的所有field
例如:hmset user:4 name shl age 32
hkeys user:4
返回:name
age
2.9 获取指定key的所有value
命令:hvals key
例如:hmset user:4 name shl age 32
hvals user:4
返回:shl
32
2.10 获取指定key的所有field-value
命令:hgetall key
例如:hmset user:4 name shl age 32
hgetall user:4
返回:name
shl
age
32
2.11 指定field的value的计数。
命令:
(1)hincrby key field
例如:hset user:1 age 32
hincrby user:1 age 10
返回:42
(2)hincrbyfloat key field
例如:hset user:1 age 32
hincrbyfloat user:1 age -8.1
返回:23.9
2.12 计算指定field的value的内容的字符串长度
命令:hstrlen key field
例如:hset user:1 name shl
hstrlen user:1 name
返回:3
三. hash类型命令的时间复杂度
四.内部编码
hash类型的内部编码有两种:
(1) ziplist(压缩列表)
当哈希类型的元素个数小于hash-max-ziplist-entries配置(默认512个),同时所有值都小于hash-maxziplist-value配置(默认为64字节),Redis会使用ziplist做为哈希的内部实现。Ziplist可以使用更加紧凑的结构来实现多个元素的连续存储,所以在节省内存方面更加优秀。
(2) hashtable(哈希表)
当哈希类型无法满足ziplist要求时,redis会采用hashtable做为哈希的内部实现,因为此时ziplist的读写效率会下降