redis-源码学习-hash
基础的hash相关的命令,t_hash.c
hset——hsetCommand
示例:HSET KEY_NAME FIELD VALUE
- 如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。
1 | void hsetCommand(redisClient *c) { |
hsetnx——hsetnxCommand
示例:HSETNX KEY_NAME FIELD VALUE
- 设置成功,返回 1 。 如果给定字段已经存在且没有操作被执行,返回 0 。
1 | void hsetnxCommand(redisClient *c) { |
hget——hgetCommand
示例:HGET KEY_NAME FIELD_NAME
- 返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。
1 | void hgetCommand(redisClient *c) { |
hmset——hmsetCommand
示例:HMSET KEY_NAME FIELD1 VALUE1 …FIELDN VALUEN
- 如果命令执行成功,返回 OK 。
1 | void hmsetCommand(redisClient *c) { |
hmget——hmgetCommand
示例:HMGET KEY_NAME FIELD1…FIELDN
- 一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。
1 | void hmgetCommand(redisClient *c) { |
hincrby——hincrbyCommand
示例:HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER
- 执行 HINCRBY 命令之后,哈希表中字段的值
1 | void hincrbyCommand(redisClient *c) { |
hincrbyfloat——hincrbyfloatCommand
示例:HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER
- 执行 Hincrbyfloat 命令之后,哈希表中字段的值。
1 | void hincrbyfloatCommand(redisClient *c) { |
hdel——hdelCommand
示例:HDEL KEY_NAME FIELD1.. FIELDN
- 被成功删除字段的数量,不包括被忽略的字段。
1 | void hdelCommand(redisClient *c) { |
hlen——hlenCommand
示例:HLEN KEY_NAME
- 哈希表中字段的数量。 当 key 不存在时,返回 0 。
1 | void hlenCommand(redisClient *c) { |
hkeys——hkeysCommand
示例:HKEYS key
- 包含哈希表中所有域(field)列表。 当 key 不存在时,返回一个空列表。
1 | void hkeysCommand(redisClient *c) { |
hvals——hvalsCommand
示例:HVALS KEY_NAME
- 一个包含哈希表中所有域(field)值的列表。 当 key 不存在时,返回一个空表。
1 | void hvalsCommand(redisClient *c) { |
hgetall——hgetallCommand
示例:HGETALL KEY_NAME
- 以列表形式返回哈希表的字段及字段值。 若 key 不存在,返回空列表。
1 | void hgetallCommand(redisClient *c) { |
hexists——hexistsCommand
示例:HEXISTS KEY_NAME FIELD_NAME
- 如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。
1 | void hexistsCommand(redisClient *c) { |
hscan——hscanCommand
示例:HSCAN key cursor [MATCH pattern] [COUNT count]
1 | void hscanCommand(redisClient *c) { |
命令 | 作用 | ziplist编码时间复杂度 | hashtable编码时间复杂度 |
---|---|---|---|
HSET | 设置指定的哈希表中 key 的值 | 平均O(n), 最坏O(N2) | O(1) |
HGET | 获取指定的哈希表中 key 的值 | O(N2) | O(1) |
HEXISTS | 判断哈希表中的 field 的值是否存在 | O(N2) | O(1) |
HDEL | 删除指定哈希表中的field,可以为多个 | O(N2) | O(1) |
HLEN | 返回指定哈希表中的长度 | O(1) | O(1) |
HGETALL | 返回指定哈希表中的所有元素 | O(n) | O(n) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SHIELD!
评论