【Java】「进击Redis」五、Redis Hash运用场景、API解析
前言
概述
Hash 表我想好哥哥们很熟悉吧,像 JAVA 中的 HashMap(我只会 JAVA)。每个人对 Hash 的叫法可能也不一样,可能是哈希、字典、关联数组等等。
在 Redis 中,Hash 类型是指键对应值本身又是一个键值对结构,类似 value={{field,value}。如图
1 常用命令
1.1 设置值
## 格式hset key field value
## 为用户1添加一对field-value,成功返回1,反之就是0
hset user:1 name test
1.2 设置值-hsetnx
## 格式,这个命令跟String的set、setnx逻辑是一样的,但是其作用域由键变为field,不懂的可以看下上一篇hsetnx key_name field value
## 再次执行下面这个命令会不成功,因为name 已经存在了
hsetnx user:1 name test
1.3 获取值
## 格式,需要同时制定key和fieldhget key field
## 获取user:1key下面的name
hget user:1 name
1.4 删除 field
## 格式,可以删除多个fieldhdel key field [field ...]
## 删除user:1下面name和age
hdel user:1 name age
1.5 统计 field 的个数
## 格式hlen key
## 统计user:1field的个数
hlen user:1
1.6 批量设值/获取 field-value
## 格式hmget key field [field ...]
hmset key field value [field value ...]
## 获取user:1下的name和age
hmget user:1 name age
## 批量设置user:1的field
hmset user:1 name test2 age 12 city guangzhou
1.7 判断 field 是否存在
## 格式hexists key field
## 判断user:1下的name是否存在,存在返回1,否则0
hexists user:1 name
1.8 获取所有 field
## 格式,怎么不叫hfields,Antirez 你误导我hkeys key
## 返回user:1 下所有的field
hkeys user:1
1.9 获取所有 value
## 格式hvals key
## 返回user:1 下所有的value
hvals user:1
1.10 获取所有的 field-value
## 格式 尽量不要用这个,如果是一个大key的话,field很多,可能会让Redis阻塞很久hgetall key
## 返回user:1 下所有的fiele和value
hgetall user:1
2 命令时间复杂度
老规矩,放个图不过分吧
3 应用场景
实际上 Hash 存的本质上来说还是 String,我们可以把我们的实体对象转换成 JSON 字符串然后存进去,当然也可以按字段对应存入 Hash,两张模式都是 OK 的。主要我们可以根据实际情况考虑,如果说我们的实体字段太多的话就不建议存 Hash 了。当我们的实体有某个字段需要频繁修改时就不建议存 String,因为只是改了其中的某一个字段,明显存 Hash 更合理一些。比如像购物车这种,可以用用户 id 为 key,商品 id 为 field,商品数量为 value,一个用户购物车又会有多条记录。
总的来说一般对象用 string + json 存储,对象中某些频繁变化的属性抽出来用 hash 存储,好哥哥们根据实际的场景看着使用吧。
另外一方面的话就是存储对象。和关系型的数据库存储对比,正常像 mysql 这种是按行显示的,而 Hash 的话则以单个对象来显示的,见下图。
下一篇:Redis List 运用场景、API 解析
上一篇:Reids 字符串 API、运用场景解析
以上是 【Java】「进击Redis」五、Redis Hash运用场景、API解析 的全部内容, 来源链接: utcz.com/a/90804.html