一:数据形式
Hash数据类型使用很普遍,它同样是key-value的方式来组织的,只是其value又包含多个field-fieldValue对。想要获取某个fieldValue,可以通过key-field联合来定位。
二:特性
1:Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加、删除操作都是 O(1)(平均)。
2:hash特别适用于存储对象,对象的格式为键值对。
3:省内存的原因是新 建一个 hash 对象时开始是用 zipmap(又称为 small hash)来存储的。这个 zipmap 其实并不 是 hash table,但是 zipmap 相比正常的 hash 实现可以节省不少 hash 本身需要的一些元数据 存储开销。尽管 zipmap 的添加,删除,查找都是 O(n),但是由于一般对象的 field 数量都不 太多。所以使用 zipmap 也是很快的,也就是说添加删除平均还是 O(1)。如果 field 或者 value 的大小超出一定限制后,Redis 会在内部自动将 zipmap 替换成正常的 hash 实现.
这个限制可 以在配置文件中指定
hash-max-zipmap-entries 64 #配置字段最多 64 个
hash-max-zipmap-value 512 #配置 value 最大为 512 字节
三:指令
1:hset key field value 设置field的值,如果key不存在则创建
2:hsetnx key field value 设置field 为指定值,如key不存在,则创建。如field 已经存在,返回 0
3:hmset key field value [field value ...] 同时设置 hash 的多个 field。
4:hget key field 获取指定field的值
5:hmget key field [field ...] 获取多个指定field的值
6:hincrby key field increment 指定field的值加上给定值(可为正负,实现加减)
7:hexists key field 测试指定的field是否存在,存在返回1,不存在返回0
8:hlen key 返回指定hash key的field数量
9:hdel key field [field ...] 删除指定的field
10:hkeys key 返回指定hash key 的所有field
11:hvals key 返回hash key 的所有value
12:hgetall key 获取指定hash所有的field value