redis进阶——哈希(Hash)

redis作为最流行的高性能的key-value数据库,笔者几乎每个项目都会用到,不过老实说,笔者在初期只会用string类型,就是说每次都是整存整取,说实话,效率不高,不知道大家有没有向我这样。

不过,我知道redis有其他类型,只是因为习惯以及懒的原因,所以长期执着于string类型,后来在空余时间,了解了其他存储方式,一看之后,瞬间就觉得自己以前太low了,今天要说的就是我redis里面的哈希(Hash)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象,如果是以前,一般是先将json转化为字符串,然后整存整取,效率太低,而hash可以允许操作单个字段和编程里面的对象类型很想(其实redis 4.0之后加入了真正的json类型)

hash的命令比string类型稍微复杂一点:

HDEL key field1 field2  ...
删除一个或多个哈希表字段


HEXISTS key field 
查看哈希表 key 中,指定的字段是否存在。


HGET key field 
获取存储在哈希表中指定字段的值。


HGETALL key 
获取在哈希表中指定 key 的所有字段和值


HINCRBY key field increment 
为哈希表 key 中的指定字段的整数值加上增量 increment 。


HINCRBYFLOAT key field increment 
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。


HKEYS key 
获取所有哈希表中的字段


HLEN key 
获取哈希表中字段的数量


HMGET key field1 field2 ..
获取所有给定字段的值


HMSET key field1 value1 field2 value2 ..
同时将多个 field-value (域-值)对设置到哈希表 key 中。


HSET key field value 
将哈希表 key 中的字段 field 的值设为 value 。


HSETNX key field value 
只有在字段 field 不存在时,设置哈希表字段的值。


HVALS key 
获取哈希表中所有值

我用户的命令大概就上面一些,当然强大的redis还有其他命令,大家有兴趣可以百度了解更多

其实当时用hash的时候发现就疑问,hash和string,效率如何,为此我专门简单测试了一些功能,从存储空间大小以及存取耗费时间,结果发现,如果每次存取用到大多字段或者全部字段,string要比hash快,但是如果字段较多,而大多数场景都是用到少数字段时,两者的时间就差太多了,特别是更改单个字段时,string需要先取,再存,而hash只需要一条命令,效率差别太大,大家可以根据自己的应用场景来选择合适的存储方式
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章