API的理解和使用——哈希类型的命令
| 命令 | 功能 |
| hset key field value | 设置哈希值 |
| hsetnx | 设置哈希值,field或键必须不存在 |
| hget | 获取某个file对应的值 |
| hdel | 删除一个或多个field-value |
| hlen | 计算field的个数 |
| hmset | 批量设置field-value |
| hmget | 批量获取field-value |
| hexists | 判断某个field是否存在 |
| hkeys | 获取所有的field |
| hvals | 获取所有的value |
| hgetall | 获取所有的field-value |
| hincrby | 自增整数 |
| hincrbyfloat | 自增浮点数 |
| hstrlen | 计算value字符串的长度 |
几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组。
在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},...{fieldN,valueN}},
Redis键值对和哈希类型二者的关系可以用下图来表示:

注意:哈希类型中的映射关系叫做field-value,注意这里的value是指field对应的值,不是键对应的值,一定要注意value在不同上下文的作用。
下面介绍一些哈希常用的命令。
1)设置值
命令:hset key field value
127.0.0.1:> hset user: name kebi
(integer)
127.0.0.1:> hset user: age
(integer)
如果设置成功会返回1,反之会返回0。
此外Redis提供了hsetnx命令,它们的关系就像set和setnx命令一样,只不过作用域由键变为field。
127.0.0.1:> hexists user: name
(integer) #user: name存在
127.0.0.1:> hsetnx user: name xiaoniao
(integer) #没有设置成功
127.0.0.1:> hget user: name
"kebi"
127.0.0.1:> hsetnx user: name xiaoniao
(integer)
127.0.0.1:> hget user: name
"xiaoniao" #field不存在才行
2)获取值
命令:hget key field
127.0.0.1:> hget user: name
"kebi"
127.0.0.1:> hget user: dorm
(nil)
如果键的field不存在或者或键本身就不存在,会返回nil。
3)删除field
命令:hdel key field [field ...]
hdel会删除一个或多个field,返回结果为成功删除field的个数:
127.0.0.1:> hkeys user:
) "name"
) "age"
) "sex"
127.0.0.1:> hdel user: name
(integer)
127.0.0.1:> hkeys user:
) "age"
) "sex"
注意如果要删除键,还是使用del:
127.0.0.1:> del user:
(integer)
127.0.0.1:> exists user:
(integer)
并没有说能单独删除哈希的value,因为没有意义。
4)计算field的个数
命令:hlen key
127.0.0.1:> hset user: name kebi
(integer)
127.0.0.1:> hset user: age
(integer)
127.0.0.1:> hset user: sex boy
(integer)
127.0.0.1:> hlen user:
(integer)
5)批量设置或获取field-value
命令:
hmget key field [field ...]
hmset key field value [field value ...]
hmset和hmget分别是批量设置和获取field-value,hmset需要的参数是key和多对field-value,hmget需要的参数是key和多个field:
127.0.0.1:> hmget user: name age sex
) "kebi"
) ""
) "boy"
127.0.0.1:> hmset user: name maoxian age sex boy
OK
127.0.0.1:> hmget user: name age sex
) "maoxian"
) ""
) "boy"
6)判断field是否存在
命令:hexists key field
127.0.0.1:> hexists user: name
(integer)
127.0.0.1:> hexists user: dorm
(integer)
如果field存在,返回结果为1,如果不存在返回0.
7)获取所有的field
命令:hkeys key
hkeys命令应该叫hfields更为恰当,它返回指定哈希键所有的field:
127.0.0.1:> keys * #返回所有的键
) "user:2"
) "user:1"
127.0.0.1:> hkeys user: #返回键user:1所有的field
) "name"
) "age"
) "sex"
127.0.0.1:> hkeys user:
) "name"
) "age"
) "sex"
8)获取所有value
命令:hvals key
127.0.0.1:> hvals user:
) "kebi"
) ""
) "boy"
127.0.0.1:> hvals user:
) "maoxian"
) ""
) "boy"
9)获取所有的field-value
命令:hgetall key
127.0.0.1:> hgetall user:
) "name"
) "kebi"
) "age"
) ""
) "sex"
) "boy"
注意:在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。
如果只需要获取部分field,可以使用hmget,如果一定要回去全部的field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型。
10)hincrby hincrbyfloat
命令:
hincrby key field
hincrbyfloat key field
hincrby和hincrbyfloat命令一样,但是它们的作用域是field。
11)计算value的字符长度(需要Redis3.2版本以上)
命令:hstrlen key field
下面提供一张哈希类型命令的时间复杂度,可以根据自身的需求选择合适的命令。
| 命令 | 时间复杂度 |
| hset key field value | O(1) |
| hget key field | O(1) |
| hdel key field [field ...] | O(k),k是field个数 |
| hlen key | O(1) |
| hgetall key | O(n),n是field总数 |
| hmget field [field ...] | O(k),k是field个数 |
| hmset field value [field value...] | O(k),k是field个数 |
| hexists key field | O(1) |
| hkeys key | O(n),n是field总数 |
| hvals key | O(n),n是field总数 |
| hsetnx key field value | O(1) |
| hincrby key field increment | O(1) |
| hincrbyfloat key field increment | O(1) |
| hstrlen key field | O(1) |
API的理解和使用——哈希类型的命令的更多相关文章
- 第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型
第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型 Hash操作,redis中Hash在内存中的存储格式如下图: hset(name, key, value)name ...
- API的理解和使用——列表类型的命令
列表类型的命令及对应的时间复杂度 操作 命令 功能 时间复杂度 添加 rpush key value [value ...] 向右插入 O(k),k是元素个数 lpush key value [val ...
- redis 学习(4)-- 哈希类型
redis 学习(4)-- 哈希类型 介绍 redis 中哈希键值结构: 可以看出:哈希键值包括 key,field,value 这三部分,即键,属性,值这三部分.可以这样来表示: key, (fie ...
- qnx:从API开始理解QNX -- 消息传递
从API开始理解QNX -- 消息传递 http://www.openqnx.com/chinese/viewtopic.php?f=5&t=2161 1. 频道与连接 Chann ...
- C++ : 从栈和堆来理解C#中的值类型和引用类型
C++中并没有值类型和引用类型之说,标准变量或者自定义对象的存取默认是没有区别的.但如果深入地来看,就要了解C++中,管理数据的两大内存区域:栈和堆. 栈(stack)是类似于一个先进后出的抽屉.它的 ...
- 【redis 学习系列】API的理解与使用(二)
3.哈希 几乎所有的语言都支持了哈希(hash)类型.在Redis中,哈希类型是指键值本身又是一个键值对结构,形如:value = {{field, value} ... {field, value} ...
- redis:hash哈希类型的操作
1. hash哈希类型的操作 1.1. hset key field value 语法:hset key field value 作用:把key中field域的值设为value 注:如果没有field ...
- API的理解和使用——键管理
核心知识点: 1.键重命名:rename和renamenx,使用renamenx时newkey必须不存在,重命名后会使用del删除原来的键,如果值比较大也会会造成阻塞. 2.随机返回一个值:rando ...
- API的理解和使用——有序集合
有序集合常用的命令 命令 功能 zadd key score member [score member ... ] 添加元素 zcard key 计算成员个数 zscore key member 计算 ...
随机推荐
- Android图片突出
概述 今天有个群友问 Android 图片凸出 效果怎么弄,早以前有过类似的需求,整个项目的提示框都是一个背景,背景上方有凸出半张图片,所以用layer-list写了一个背景来实现. 思路 随便画了一 ...
- NV 3D投影方案 【转】
http://tu.pcpop.com/all-677013.htm 1/8 NVIDIA 3D方案涉及图形处理器(GPU).信号发射器.快门式3D眼镜.3D播放软件以及经过NVIDIA认证的显示器. ...
- OpenCV3.1使用SIFT
待完善... Opencv3.1.0+opencv_contrib配置及使用SIFT测试
- 2016.6.20 在Eclipse配置Tomcat服务器的步骤
好久没接触,又忘记了如何在eclipse中配置tomcat. (1)打开eclispe的preference (2)找到Server下方的Runtime Environment,单击右方的Add按钮. ...
- Predicate与filter
转: http://blog.csdn.net/michaellufhl/article/details/6329823 怎么根据某些条件来过滤Collection的元素?我们可以在循环里面判断元素是 ...
- nginx如何设置防盗链
关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的彻底的防盗链! 一般,我们做好防盗链之后其他网站盗链的本站图片就会全部失效无法显示,但是您如果通 ...
- Java中执行存储过程和函数
装载于:http://www.cnblogs.com/liunanjava/p/4261242.html 一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. Ca ...
- 笔记本中G-Sensor(加速计) M-Sensor 陀螺仪等传感器的区别
1.G-sensor重力传感器 作用 G-sensor中文是加速度传感器的意思(英文全称是Accelerometer-sensor),它能够感知到加速力的变化,加速力就是当物体在加速过程中作用在物体上 ...
- cmake学习之- set
最后更新: 2019-06-06 一.简单介绍 set 和 unset 为一对相反的指令,分别为设置变量以及取消设置变量. 什么是变量? 变量就是用于保存值的存储单元. set 有哪几种? set 有 ...
- 数据库ACID操作---事务四原则
事务操作四原则: 1>原子性:简单来说——整个事务操作如同原子已经是物理上最小的单位,不可分离事务操作要么一起成功,要么一起失败. 2>一致性:倘若事务操作失败,则回滚事务时,与原始状态一 ...