• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共46篇

    Redis数据库

关闭

返回栏目

关闭

返回Redis数据库栏目

20 - 数据类型 - Hash - 哈希字典 - 操作

作者:

贺及楼

成为作者

更新日期:2024-03-26 16:53:19

数据类型 - Hash - 哈希字典 - 操作

Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似Java里面的Map<String,Object>
用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储

hash例子

key <field> <value>
john sex boy
age 20
color white
Lisa sex girl
age 20
color pink

操作,:找下一层

  1. "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 字节

数据少用ziplist压缩列表

新建一个 hash 对象时开始是用zipmap(又称为 small hash)来存储的。这个zipmap 其实并不是 hash table,但是zipmap 相比正常的 hash 实现可以节省不少 hash本身需要的一些元数据存储开销。尽管 zipmap 的添加,删除,查找都是 O(n),但是由于一般对象的 field数量都不太多。所以使用 zipmap 也是很快的,也就是说添加删除平均还是 O(1)。如果 field或者value的大小超出一定限制后,redis会在内部自动将zipmap替换成正常的hash实现.这个限制可以在配置文件中指定。

数据多用hashtable哈希表