储存数据的格式 | value只能存字符串,不存在嵌套现象,如果没有获取到,值为nil |
---|---|
最大储存容量 | 每个Hash对可以储存2^23-1个的键值对 |
如果使用 String 类型存储粉丝、投稿数需要使用多个Key来储存多个Value,采用 Hash 模式可减少 Key 的使用数量,Hash类型实质可看做 Redis的HashMap,通过 key field value 的形式进行数据储存。设计初衷不是用来储存大量对象而设计的,不能滥用,不可将hash作为对象列表使用。
基础命令
添加&修改数据:
hset key field value
获取数据:
hget key field //获取Value
hgetall key //获取key对应所有的Field和Value
注:hgetall是获取key下所有的Field和Value,如果数量大,遍历效率会低,可能成为数据访问瓶颈。
删除数据
hdel key field1 field2 ...
添加&修改多个数据
hmset key field1 value1 field2 value2 ...
获取多个数据
hmget key field1 field2 ...
获取key中Field的个数:
hlen key
判断Key中是否存在某个Field:
hexists key field //有值返回1,没有返回0
拓展命令
获取key中所有的Field:
hkeys key //返回的是个列表
获取key中所有的Value:
hvals key //返回的是个列表
自增:
hincrby key field size //指定key的field自增size
hincrbyfloat key field size //指定key的field自增size(float)
不覆盖的创建数据:
hsetnx key field value
使用案例
用户购物车
先将所有的商品信息建立一个 hash,再将用户的每条商品记录保存为两条Field。第一条储存数量,第二条储存商品信息。第二条仅需储存商品信息hash中的 Key:Field 即可精简储存内容,以此达到加速查询的目的。
商品信息储存:
hmset phone iphone:12 {title:iphone12紫色,price:8888}
用户的存储:
hmset user1 g01:num 12 g01:info phone:apple12
抢购
商家商品
hmset sj01 huawei 1000 iphone 1000
用户的购买:
hincrby sj01 huawei -200