Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似Java里面的Map<String,Object>
用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储
key | <field> | <value> |
---|---|---|
john | sex | boy |
age | 20 | |
color | white | |
Lisa | sex | girl |
age | 20 | |
color | pink |
"xxx" key有空格加双引号
命令 | 解释 | 成功 | 失败 | 空值 |
---|---|---|---|---|
hset <key><field><value> |
增 - 单 - 赋值<value> | 返回int(1),覆盖返回int(0) | ||
hsetnx <key><field><value> |
增 - 单 - 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 . | (integer) 1 | (integer) 0 | |
hmset <key1><field1><value1><field2><value2>... |
增 - 多 - 批量设置hash的值 | 返回ok | ||
hget <key1><field> |
查 - 单 - 指定 value | 返回值 | (nil) | |
hmget key filed1....fieldN |
查 - 多 - 获取全部指定的 hash filed的值 | 返回值 | (nil) | |
hkeys <key> |
查 - 多 - 所有field | 返回值 | (empty list or set) | (empty list or set) |
hvals <key> |
查 - 多 - 所有value | 返回值 | (empty list or set) | (empty list or set) |
hgetall <key> |
查 - 多 - 所有 filed 和 value | 返回值 | (empty list or set) | (empty list or set) |
hlen <key> |
查 - 多 - 返回指定 hash的field数量。 | 存在(integer) 1,不存在(integer) 0 | ||
HSTRLEN <key> <field> |
查 - 多 - 返回指定 hash的field的value的str数量 | 存在(integer) 1,不存在(integer) 0 | ||
hexists <key> <field> |
查 - 单 - 检测指定 field 是否存在 | 存在(integer) 1,不存在(integer) 0 | ||
hincrby <key><field><increment> |
改 - 单 - 为哈希表 key 中的域 field 的值加上增量 1 -1。注意:如果value是str会返回(integer) 1 | (integer) 150 | (error) ERR hash value is not an integer | |
hincrbyfloat <key><field><increment> |
改 - 单 - 为哈希表 key 中的域 field 的值加上增量 1.0 -1.0 | “4.5” | ||
hdel <key> <field> |
删 - 单 - 删除指定的 hash field。 | 成功删除的个数(integer) 1 | 不存在(integer) 0 | |
hash-max-zipmap-entries 64 |
设置 - 配置字段最多 64 个 | |||
hash-max-zipmap-value 512 |
设置 - 配置 value 最大为 512 字节 |
新建一个 hash 对象时开始是用zipmap(又称为 small hash)来存储的。这个zipmap 其实并不是 hash table,但是zipmap 相比正常的 hash 实现可以节省不少 hash本身需要的一些元数据存储开销。尽管 zipmap 的添加,删除,查找都是 O(n),但是由于一般对象的 field数量都不太多。所以使用 zipmap 也是很快的,也就是说添加删除平均还是 O(1)。如果 field或者value的大小超出一定限制后,redis会在内部自动将zipmap替换成正常的hash实现.这个限制可以在配置文件中指定。