目录
1 key的命名规范
2 hash类型
3 基本操作
1 hset key field value:添加修改数据
2 hget key field,hgetall key:获取数据
3 hdel key field1 [field2]:删除数据
4 hmset key field1 value1 field2 value2……:添加修改多个数据
5 hmget key field1 hield2……:获取多个数据
6 hlen key:获取hash表中字段的数量
7 hexists key field:获取hash表中是否存在指定字段
8 hkeys key:获取hash表的所有字段名
9 hvals key:获取hash表中的所有字段值
10 hincrby key field increment / hincrbyfloat key field incremnt:给字段的数值加上increment
11 hsetnx key field value
4 hash类型的操作注意事项
5 hash的应用场景:购物车
在介绍hash之前我们首先介绍以下key的命名规范。
由于redis中的热点数据都是来源于关系型数据库,因此要将数据对应起来,我们一般情况下key的命名规范如下:
表名:主键名:主键值:字段名
例如redis中有一条数据来自于关系型数据库的表student中的id为1001的学生的name
那么我们就可以设置key的名字为:
student:id:1001:name
这样的命名规范一目了然,并且简洁。
如果需要在redis中存储一个人的多个信息,我们可以采用Json的格式来存储,但是如果有频繁的更新操作那么Json存储就显得笨重,但是如果我们分开来存储,那么但是它又是属于一个整体,分开存储又显得不合适,如下所示:
如上图:hash类型即是在value里面再嵌套一个key-value,如下图所示。
hash类型:
hget key field可以拿单个field里面的数据,比如我们要拿user name 里面的数据:
hgetall 通过key可以拿到所有的数据,单数为field,双数为value.如下图所示:
例如我们将user 里面的weight删除。
如上图,name已经修改了,并且添加了weight为50,hmset存在就改,不存在就加。
即user里面有3个字段,即field的个数。
如上图,user里面存在字段age,不存在字段high。
如上如,先通过hincrby给age加了10,再通过hincrbyfloat给age加了10.5
只有field不存在的时候才设置它的值。
电商中的购物车一般如下图所示:
首先每个用户都有自己的一个购物车,每个购物车里面的商品不止一个,并且每个商品的数量也不止一个。
因此我们可以用用户的id作为key,用购物车商品的编号作为field,用商品的数量作为value。
同时相关的操作也可以实现,例如hget、hincrby可以对商品数量进行操作,hgetall可以对应全选操作,hdel对应删除操作,hlen还可以得到购物车中的商品总数量。
如果我们仅讨论购物车的redis存储模型:添加、浏览、更改数量、删除、清空等,那么hash是完全可以实现这个模型的。
解决方案如下:
redis通常可以应用于抢购、限购、限量发放优惠卷、激活码等业务的数据存储设计。