✅Redis中hash结构比string的好处有哪些?
不知道最近为啥这个问题出现的概率很高,这俩有啥好比较的,使用的场景都不一样,唉。
典型回答
String就是字符串,用于存储简单的值,而Hash是一种哈希表结构,用于存储本身具有k-v结构的数据。一般来说他俩没啥对比的必要,只不过他们有个共同特点,那就是都可以用来存储对象。
对于String类型,要存储对象的话,需要把对象序列化成一个JSON字符串,然后把整个字符串保存在Redis的String结构中,而使用Hash接口的话,则只需要把对象转成map(比如使用fastjson可以直接转),就可以直接把这个map存储到Redis的hash结构中了。
相比之下,同样是存储对象的话,使用hash结构有一个好处,那就是如果要修改某个特定的字段,可以直接修改,而使用String的话,需要把整个字符串查出来,做反序列化以后再修改,然后再序列化之后存储到Redis中。所以,非常直观的可以看见Hash结构的操作更加简单。
而且如果要做一次修改的话,操作也要复杂的多,会存在多次网路交互,而且因为修改是在内存中做的,这个过程如果没做好分布式锁,会导致并发问题。
当然,也可以不把一个对象都存在一个key里面,也可以拆分一下,比如用独立键的方式,如
# String 方案(3个独立键)
SET user:1000:name "Alice"
SET user:1000:age 30
SET user:1000:email "[email protected]"但是这么做的话,相比用一个hash结构存储来说,key就多了很多,浪费很多空间。