8.4 哈希对象

2018-09-22  本文已影响0人  猪大金

哈希表对象的彪马可以是ziplist或者hashtable
ziplist编码的哈希对象使用压缩列表作为底层实现,每当有新的键值对要加入到哈希对象,程序会先将保存了键的压缩列表节点推入到压缩列表表尾,然后在将保存了值的压缩列表节点推入到压缩列表的表尾。

hashtable编码的哈希对象使用字典作为底层实现,哈希表对象中的每个键值对都使用一个字典键值对来保存:

8.4.1 编码转换

当哈希对象可以同时满足以下两个条件时,哈希对象使用ziplist编码:

8.4.2 哈希命令

1. HDEL
HDEL key field [field ...]

删除哈希表key中的一个或多个指定域,不存在的域将被忽略。

2. HEXISTS
HEXISTS key field

查看哈希表key中,给定域field是否存在。

3. HGET
HGET key field

返回哈希表key中给定域field的值。

4. HGETALL
HGETALL key

返回哈希表key中,所有的域和值。
在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。

5. HINCRBY
HINCRBY key field increment

为哈希表key中的域field的值加上增量increment
增量也可以为负数,相当于对给定域进行减法操作。
如果key不存在,一个新的哈希表被创建并执行HINCRBY命令。
如果域field不存在,那么在执行命令前,域的值被初始化为0
对一个储存字符串值的域field执行HINCRBY命令将造成一个错误。
本操作的值被限制在64位(bit)有符号数字表示之内。

6. HINCRBYFLOAT
HINCRBYFLOAT key field increment

为哈希表key中的域field加上浮点数增量increment
如果哈希表中没有域field,那么HINCRBYFLOAT会先将域field的值设为0,然后再执行加法操作。
如果键key不存在,那么HINCRBYFLOAT会先创建一个哈希表,再创建域field,最后再执行加法操作。
当以下任意一个条件发生时,返回一个错误:

7. HKEYS
HKEYS key

返回哈希表key中的所有域。

8. HLEN
HLEN key

返回哈希表key中域的数量。

9. HMGET
HMGET key field [field ...]

返回哈希表key中,一个或多个给定域的值。
如果给定的域不存在于哈希表,那么返回一个nil值。
因为不存在的key被当作一个空哈希表来处理,所以对一个不存在的key进行HMGET操作将返回一个只带有nil值的表。

10. HMSET
HMSET key field value [field value ...]

同时将多个field-value(域-值)对设置到哈希表key中。
此命令会覆盖哈希表中已存在的域。
如果key不存在,一个空哈希表被创建并执行HMSET操作。

11. HSET
HSET key field value

将哈希表key中的域field的值设为value
如果key不存在,一个新的哈希表被创建并进行HSET操作。
如果域field已经存在于哈希表中,旧值将被覆盖。

12. HSETNX
HSETNX key field value

将哈希表key中的域field的值设置为value,当且仅当域field不存在。
若域field已经存在,该操作无效。
如果key不存在,一个新哈希表被创建并执行HSETNX命令。

13. HVALS
HVALS key

返回哈希表key中所有域的值。

14. HSCAN
HSCAN key cursor [MATCH pattern] [COUNT count]
15. HSTRLEN
HSTRLEN key field

返回哈希表key中, 与给定域field相关联的值的字符串长度(string length)。
如果给定的键或者域不存在, 那么命令返回0

上一篇 下一篇

猜你喜欢

热点阅读