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只需要一条命令,效率差别太大,大家可以根据自己的应用场景来选择合适的存储方式