redis数据类型(三)hash类型
一、hash类型
hash是一个string类型的field和value的映射表。添加,删除操作都是O(1)(平均)。
hash特别适合用于存储对象。相对于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新建一个hash对象时开始是用 zipmap(又称为 small hash)来存储的。这个 zipmap 其实并不是hashtable,但是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 字节
二、hash的基本操作
- hset key field value 设置hash field为指定值,如果key不存在,则创建,存在则覆盖.
- hget key field 获取指定的hash field。
- hmget key filed1....fieldN 获取全部指定的hash filed。
- hmset key filed1 value1 ...... filedN valueN 同时设置hash的多个field。
- hincrby key field integer 将指定的hashfiled 加上指定值。成功返回hashfiled变更后的值。
- hexists key field 检测指定field是否存在。存在返回1,不存在返回0.
- hdel key field 删除指定的hash field。 成功返回1,失败返回0.
- hlen key 返回指定hash的field数量。
- hkeys key 返回hash的所有field。
- hvals key 返回hash的所有value。
- hgetall 返回hash的所有filed和value。
- hsetnx key filed value 添加一个VALUE到HASH STORE中,如果key存在,则失败。
- hincrbyfloat key field float 根据HASH表的KEY,为KEY对应的VALUE自增参数VALUE。浮点型。