Redis | Redis 哈希相关命令

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: Redis | Redis 哈希相关命令

       Redis 支持多种数据结构,比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 哈希 相关的命令,也就是关于 Hashes 相关的命令,如下图。

       上图中用红色圈中的部分,就是关于 哈希 相关的命令。如果想要在 Redis 中查看相关的命令可以使用 help 命令来进行查看,命令如下。

127.0.0.1:6379> help @hash

       在按下回车后,可以看到 Hashes 相关命令的说明,如下图。


       图中就是关于 Hashes 相关的部分命令。

常用 Hashes 相关命令

1、hset

       该命令的作用是:设置哈希字段值,该命令的格式如下:

hset key field value

       例子如下:

127.0.0.1:6379> hset user001 name zhangsan
(integer) 1
127.0.0.1:6379> hset user001 gender male
(integer) 1
127.0.0.1:6379> hset user001 age 18
(integer) 1

      在上面的命令中,user001 是 key,name、gender 和 age 是 field,zhangsan、male 和 18 则是 value。


      同一个 key 下可以有多个不同的 field,每个 field 有自己对应的 value。

2、hsetnx

       该命令的作用是:设置哈希的一个字段,当指定的字段不存在时才会被设置。该命令的格式如下:

hsetnx key field value

       例子如下:

127.0.0.1:6379> hsetnx user001 age 18
(integer) 0
127.0.0.1:6379> hsetnx user001 weight 70
(integer) 1

      在上面的命令中,age 字段已经存在于 user001 这个 key 中,因此 hsetnx 命令的执行并没有添加或修改 age,而 weight 在 user001 这个 key 中是不存在的,因此 weight 被添加到 user001  中。


3、hmset

       该命令的作用是:可以一次对哈希添加多个 field 和 value。该命令的格式如下:

hmset key field value [field value ...]

       例子如下:

127.0.0.1:6379> hmset user002 name lisi gender femle age 20 weight 65
OK

4、hget

       该命令的作用是:获取哈希中字段的值,该命令的用法如下:

127.0.0.1:6379> hget user001 name
"zhangsan"
127.0.0.1:6379> hget user001 gender
"male"

5、hgetall

       该命令的作用是:获取哈希的所有字段的值,该命令的用法如下:

127.0.0.1:6379> hgetall user001
1) "name"
2) "zhangsan"
3) "gender"
4) "male"
5) "age"
6) "18"
7) "weight"
8) "70"
127.0.0.1:6379> hgetall user002
1) "name"
2) "lisi"
3) "gender"
4) "femle"
5) "age"
6) "20"
7) "weight"
8) "65"

6、hkeys

       该命令的作用是:获取哈希的所有字段,但是不获取值,该命令的用法如下:

127.0.0.1:6379> hkeys user001
1) "name"
2) "gender"
3) "age"
4) "weight"

7、hexists

       该命令的作用是:判断字段是否存在于指定哈希中,该命令的用法如下:

127.0.0.1:6379> hexists user001 name
(integer) 1
127.0.0.1:6379> hexists user001 school
(integer) 0

8、hlen

       该命令的作用是:获取指定哈希中字段的数量,该命令的用法如下:

127.0.0.1:6379> hlen user001
(integer) 4
127.0.0.1:6379> hlen user002
(integer) 4

9、hmget

       该命令的作用是:获取指定哈希中的多个字段,该命令的用法如下:

127.0.0.1:6379> hmget user001 name age
1) "zhangsan"
2) "18"

10、hstrlen

       该命令的作用是:获取指定哈希中字段的长度,该命令的用法如下:

127.0.0.1:6379> hstrlen user001 name
(integer) 8
127.0.0.1:6379> hstrlen user001 age
(integer) 2

11、hvals

       该命令的作用是:获取指定哈希的所有值,不获取字段名称,该命令的用法如下:

127.0.0.1:6379> hvals user001
1) "zhangsan"
2) "male"
3) "18"
4) "70"

12、hincrby

       该命令的作用是:将指定哈希中的指定字段的值加一个指定的整型值,该命令的用法如下:

127.0.0.1:6379> hget user001 age
"18"
127.0.0.1:6379> hincrby user001 age 2
(integer) 20

13、hincrbyfloat

       该命令的作用是:将指定哈希中的指定字段的值加一个指定的浮点型值,该命令的用法如下:

127.0.0.1:6379> hget user002 age
"20"
127.0.0.1:6379> hincrbyfloat user002 age 2.5
"22.5"
127.0.0.1:6379> hincrbyfloat user002 age 2
"24.5"

      使用 hincrbyfloat 可以对哈希中的某个字段加一个浮点型的值,也可以加一个整型的值

127.0.0.1:6379> hincrbyfloat user001 age 1
"21"
127.0.0.1:6379> hincrby user001 age 1.5
(error) ERR value is not an integer or out of range

      对于 hincrby 只能增加整型值,而不能增加浮点型的值

14、hdel

       该命令的作用是:删除哈希中指定一个或多个字段,该命令的用法如下:

127.0.0.1:6379> hdel user001 name age
(integer) 2
127.0.0.1:6379> hgetall user001
1) "gender"
2) "male"
3) "weight"
4) "70"
127.0.0.1:6379> hdel user002 name
(integer) 1
127.0.0.1:6379> hgetall user002
1) "gender"
2) "femle"
3) "age"
4) "24.5"
5) "weight"
6) "65"

总结

       Redis 的哈希类型提供的命令相对比较简单,而且其中一些命令看起来是比较类似的,比如 hgetall 和 hvals,前者返回字段和值,后者只返回了值。那么为什么要存在类似 hvals 这样的命令呢,我自己的考虑是“效率”,当我们对哈希中存储的字段很明确时,只返回值而不返回字段可以减少网络传输的数据量,可以提高传输效率。另外一方面,返回字段和值的格式,与只返回值的格式相对也不一样,这样也节省了内存的空间。

cfb8cfafed9c83517740f2e2fbbff4bb.png

       本文介绍的哈希是 Redis 几种基础数据类型的最后一个数据类型了,其中 字符串、集合、有序集合、列表,在前面都介绍过了。在后面的内容中,我会逐步的再整理其他相关的命令,还有基础数据结构的一些应用场景。而且,我也会整理一些我看过的 Redis 的源码进行分享。我希望能较为完整的将我对 Redis 的所学进行整理,方便自己的回顾。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
9天前
|
存储 NoSQL 关系型数据库
Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)
Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)
27 1
|
10天前
|
NoSQL 关系型数据库 MySQL
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
19 1
|
17天前
|
存储 NoSQL 算法
Redis(四):del/unlink 命令源码解析
Redis(四):del/unlink 命令源码解析
|
2天前
|
存储 Java
Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
|
2天前
|
存储 NoSQL Redis
Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
|
5天前
|
NoSQL 算法 Linux
【内附完整redis配置文件】linux服务器命令设置redis最大限制内存大小,设置redis内存回收机制,redis有哪些回收机制
【内附完整redis配置文件】linux服务器命令设置redis最大限制内存大小,设置redis内存回收机制,redis有哪些回收机制
7 0
|
1月前
|
存储 JSON NoSQL
Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-
Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-
|
1月前
|
存储 NoSQL 算法
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
|
1月前
|
NoSQL Redis 索引
Redis的基础命令集详解
Redis的基础命令集详解
16 0