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 这样的命令呢,我自己的考虑是“效率”,当我们对哈希中存储的字段很明确时,只返回值而不返回字段可以减少网络传输的数据量,可以提高传输效率。另外一方面,返回字段和值的格式,与只返回值的格式相对也不一样,这样也节省了内存的空间。
本文介绍的哈希是 Redis 几种基础数据类型的最后一个数据类型了,其中 字符串、集合、有序集合、列表,在前面都介绍过了。在后面的内容中,我会逐步的再整理其他相关的命令,还有基础数据结构的一些应用场景。而且,我也会整理一些我看过的 Redis 的源码进行分享。我希望能较为完整的将我对 Redis 的所学进行整理,方便自己的回顾。
- Codeforces Round #415 (Div. 2)(A,暴力,B,贪心,排序)
- BZOJ 2456: mode(新生必做的水题)
- 【专知-PyTorch手把手深度学习教程07】NLP-基于字符级RNN的姓名分类
- Codeforces Round #301 (Div. 2)(A,【模拟】B,【贪心构造】C,【DFS】)
- 【专知-PyTorch手把手深度学习教程06】NLP-Word Embedding快速理解与PyTorch实现: 图文+代码
- [linux][memory]memcmp几种实现和性能对比
- 蒙特卡洛算法及其实现
- 【专知-PyTorch手把手深度学习教程05】Dropout快速理解与PyTorch实现: 图文+代码
- 【专知-PyTorch手把手深度学习教程04】GAN快速理解与PyTorch实现: 图文+代码
- 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
- 【专知中秋呈献-PyTorch手把手深度学习教程03】LSTM快速理解与PyTorch实现: 图文+代码
- BZOJ 3098: Hash Killer II(新生必做的水题)
- [接口测试 - 基础篇] 04 无法绕过的json解析
- 【专知-PyTorch手把手深度学习教程02】CNN快速理解与PyTorch实现: 图文+代码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- low版爬虫脚本,Python简单图片爬虫案例
- 漫画:什么是计数排序?
- SEO工具脚本,Python百度普通收录API提交工具
- Elastic Stack 实现日志的自动采集、搜索和分析
- 致开发人员:沉迷面向对象编程不可自拔?函数式编程了解一下
- MySQL空间函数实现位置打卡
- 单细胞交响乐8-marker基因检测
- 用TensorFlow.js在浏览器中进行实时语义分割 | MixLab算法系列
- python实现高性能mock服务
- 数据可视、语义分割、T_Youtube、智能调酒 | Mixlab人工智能合集
- Appium自动化测试框架探索与实践
- 交叉验证和超参数调整:如何优化你的机器学习模型
- 编写Docker Compose时要注意的五大常见错误
- 详解DBSCAN聚类
- 机器学习入门:偏差和方差