一.概念

在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类型命令的时间复杂度

Redis数据结构和内部编码--哈希(hash)

四.内部编码

hash类型的内部编码有两种:

(1)      ziplist(压缩列表)

当哈希类型的元素个数小于hash-max-ziplist-entries配置(默认512个),同时所有值都小于hash-maxziplist-value配置(默认为64字节),Redis会使用ziplist做为哈希的内部实现。Ziplist可以使用更加紧凑的结构来实现多个元素的连续存储,所以在节省内存方面更加优秀。

(2)      hashtable(哈希表)

当哈希类型无法满足ziplist要求时,redis会采用hashtable做为哈希的内部实现,因为此时ziplist的读写效率会下降

相关文章: