Redis Hash类型操作与使用场景
一、Hash类型操作
一)Hash类型概述
以下图为关系型数据表记录的两条用户信息,用户的属性作为表的列,每条用户信息作为行。
如果将其用哈希类型存储,如图所示。
二)Hash类型操作
Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。
Hash类型的常见命令:
HSET key field value:添加或者修改一个hash类型key的field的值
# 获取添加一个key
127.0.0.1:6379> hset user:1 id 1
1
HGET key field:获取一个hash类型key的field的值
# 获取key的值
127.0.0.1:6379> hget user:1 id
1
HMSET:批量添加多个hash类型key的field的值
# 批量定义
127.0.0.1:6379> hmset user:1 name jack age 18 sex m
OK
HMGET:批量获取多个hash类型key的field的值
# 批量查询
127.0.0.1:6379> hmget user:1 name age sex
jack
18
m
HGETALL:获取一个hash类型的key中的所有的field和value
# 获取key中的所有的field和value
127.0.0.1:6379> hgetall user:1
id
1
name
jack
age
18
sex
m
HKEYS:获取一个hash类型的key中的所有的field
# 获取key中的所有的field
127.0.0.1:6379> hkeys user:1
id
name
age
sex
HDEL:删除一个hash类型key的field和value
# 删除field:sex
127.0.0.1:6379> hdel user:1 sex
1
# 查询是否存在
127.0.0.1:6379> hkeys user:1
id
name
age
HINCRBY:让一个hash类型key的字段值自增并指定步长
# 自增1
127.0.0.1:6379> hincrby user:1 age 1
19
HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
# 添加phone
127.0.0.1:6379> hsetnx user:1 phone 111
1
二、使用场景
存储对象:
Hash类型的(key, field, value)的结构与对象的(对象id, 属性, 值)的结构相似,可以用来存储对象。比如,商品的价格、销量、关注数、评价数等可能经常发生变化的属性,就适合存储在Hash类型里。当然,不常变化的属性存储在Hash类型里也没有问题,比如商品名称、商品描述、上市日期等。
购物车:
以用户id为key,商品id为field,商品数量为value,恰好构成了购物车的3个要素,Hash类型非常适合这种场景。
Hash类型可以灵活添加删除对象属性,底层使用哈希表结构实现数据存储。每个Hash可以存储2^32-1个键值对(40多亿)。此外,Hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)。