[转] 高可用Redis(三):Hash类型
1.哈希类型键值结构
哈希类型也是key-value结构,key是字符串类型,其value分为两个部分:field和value
其中field部分代表属性,value代表属性对应的值
上面的图里,user:1:info
为key,name,age,Date
为user这个key的一些属性,value是属性对应的值
在hash中,可以为key添加一个新的属性和新的值
比如使用下面的命令向user:1:info这个key添加一个新属性viewCounter,属性对应的值为100
1 | hset user:1:info viewCounter 100 |
2.特点
1 | key-value结构 |
3.Redis哈希类型对应的命令
3.1 hget命令,hset命令和hdel命令
1 | hget key field 获取hash key对应的field的value |
例子:
1 | 127.0.0.1:6379> hset user:1:info age 23 |
注意事项:
1 | hget命令,hset命令和hdel命令的时间复杂度为O(1) |
3.2 hexists命令和hlen命令
1 | hexists key field 判断hash key是否有field |
例子:
1 | 127.0.0.1:6379> hgetall user:1:info |
注意事项:
1 | hexists命令和hlen命令的时间复杂度为O(1) |
3.3 hmget命令和hmset命令
1 | hmget key field1 field2 ... fieldN 批量获取hash key的一批field对应的值 |
例子:
1 | 127.0.0.1:6379> hmset user:2:info age 30 name mysql page 50 |
注意事项:
1 | hmget命令和hmset命令的时间复杂度为O(1) |
3.4 hgetall命令,hvals命令和hkeys命令
1 | hgetall key 返回hash key对应所有的field和value |
例子:
1 | 127.0.0.1:6379> hgetall user:2:info |
注意事项:
1 | hgetall命令,hvals命令和hkeys命令的时间复杂度为O(1) |
3.5 hsetnx命令,hincrby命令和hincrbyfloat命令
1 | hsetnx key field value 设置hash key对应field的value(如field已经存在,则失败) |
注意事项:
1 | hsetnx命令,hincrby命令和hincrbyfloat命令的时间复杂度为O(1) |
4.实战
记录网站每个用户个人主页的访问量,也可以使用哈希类型
这样可以保证每个用户的相关数据是一个整体,而使用字符串类型保存的话,则每个用户个人主面的访问量与每个用户的其他数据都是一个分离的状态。
记录网站每个用户个人主页的访问量需要根据实际情况来进行设计使用
1 | hincrby user:1:info pageview count |
5.使用Redis保存每个用户相关的数据,可以使用三种方式
5.1 方式一
使用用户的id为key,把用户的相关数据进行序列化后并做为value
使用时,根据用户id获取对应的数据的字符串格式,进行反序列化后就可以得到用户相关的数据进行查询和更新操作
5.2 方式二
使用用户的id与用户对应的属性名进行拼接得到新的字符串,并做为key,用户对应属性的值做为value
这样,用户的所有信息都是分离开的,可以很方便的对用户的数据进行查询和更新,并且可以很方便的为用户添加新的属性,而不用对原来的属性有影响
5.3 方式三
使用用户id做为key,用户的其他数据都保存为hash格式,
对用户的属性进行查询,更新和添加都比较方便
保存用户相关数据的方式比较
语雀镜像 : [转] 高可用Redis(三):Hash类型 ,点此 提问
[转] 高可用Redis(三):Hash类型