哈希
几乎所有的编程语言都提供了哈希(hash) 类型, 它们的叫法可能是哈希、 字典、 关联数组。 在Redis中, 哈希类型是指键值本身又是一个键值对结构, 形如value={{field1, value1}, …{fieldN, valueN}}
(1) 设置值
hset key field value
如果设置成功会返回1, 反之会返回0。 此外Redis提供了hsetnx命令, 它们的关系就像set和setnx命令一样, 只不过作用域由键变为field
(2) 获取值
hget key field
如果键或field不存在, 会返回nil
(3) 删除field
hdel key field [field …]
hdel会删除一个或多个field, 返回结果为成功删除field的个数
(4) 计算field个数
hlen key
(5) 批量设置或获取field-value
hmget key field [field …]
hmset key field value [field value …]
hmset和hmget分别是批量设置和获取field-value, hmset需要的参数是key和多对field-value,hmget需要的参数是key和多个field
(6) 判断field是否存在
hexists key field
包含返回结果为1, 不包含时返回0。
(7) 获取所有field
hkeys key
hkeys命令应该叫hfields更为恰当, 它返回指定哈希键所有的field。
(8) 获取所有value
hvals key
(9) 获取所有的field-value
hgetall key
在使用hgetall时, 如果哈希元素个数比较多, 会存在阻塞Redis的可能。如果开发人员只需要获取部分field, 可以使用hmget, 如果一定要获取全部field-value, 可以使用hscan命令, 该命令会渐进式遍历哈希类型。
(10) hincrby hincrbyfloat
hincrby key field
hincrbyfloat key field
hincrby和hincrbyfloat, 就像incrby和incrbyfloat命令一样, 但是它们的作用域是filed。
(11) 计算value的字符串长度
hstrlen key field
内部编码
哈希类型的内部编码有两种
1.ziplist(压缩列表) : 当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个) 、 同时所有值都小于hash-max-ziplist-value配置(默认64字节) 时, Redis会使用ziplist作为哈希的内部实现, ziplist使用更加紧凑的结构实现多个元素的连续存储, 所以在节省内存方面比hashtable更加优秀。
2.hashtable(哈希表) : 当哈希类型无法满足ziplist的条件时, Redis会使用hashtable作为哈希的内部实现, 因为此时ziplist的读写效率会下降, 而hashtable的读写时间复杂度为O(1) 。