Hash类型是String类型的field和value的映射表,或者说一个String集合。它特别适合存储对象,相比较而言,将一个对象类型存储在Hash类型里比存储在String类型里占用更少的内存空间,并方便存取整个对象。
(场景:一张表,转换成一个hash。)
(第一种方式:hash的key名对应表的字段名,value值对应表的数据。一个hash的属性对应数据库的一条记录,非常一致,几个hash放在一个集合里面,这种映射是最清楚的)
(第二种方式:数据库里有一张表user,字段id(UUID),name, sex, age。给hash起一个名字user_table,这个hash里面的一个key,对应数据表里的一个UUID,把一个很长的剩下记录放在json里面,对应一个value)
(当工作中,一行数据里面几十个字段,整条去取,用第二种方式,一个UUID加json。如果很频繁取去取其中的几个字段,缓存应该设计的细粒度一点,把hash当前一个对象,设置name,age,sex等,只取name即可)
形如:hset myhash field1 hello(含义是hset是hash集合,myhash是集合名字,field1是字段名,hello为其值)。使用hget myhash field1 获取内容,也可以存储多个值。
hset user id 1
hset user name z3
hset user age 20
hset sex man
hget user name
hget user id
hget user age
hget user sex
hmset可以进行批量存储多个键值对,hmset myhash sex nan addr beijing
hmset user2 id 2 name l4 age 25
也可以使用hmget进行批量获取多个键值对(返回一个集合)。
hmget user2 id name age
同样也有hsetnx,和setnx大同小异
hincrby和hdecrby 集合递增和递减
hexists 是否存在key,如果存在返回1,不存在返回0
hexists user age
hlen 返回hash集合里的所有的键数值
hdel 删除指定hash的field
hkeys 返回hash里所有的字段
hkeys user
hvals 返回hash的所有value
hvals user
hgetall 返回hash里所有的key和value
hgetall user