Redis命令详解:Hashs
Hash是一种String类型的field、value的映射表,因此,它非常适合存储对象。下面我们来一一介绍与Hash相关的命令。
HDEL
最早可用版本:2.0.0
时间复杂度:O(N),其中N为要删除的field的个数
HDEL命令用于删除指定key的指定的一个或多个field。如果指定的field不存在于指定的key中则会被忽略,如果指定的key不存在,会当做空的hash进行处理,向客户端返回0。
命令的返回值是实际删除的field的个数,不包括不存在的field。
从2.4.0版本开始,该命令支持一次删除多个field。在此之前,如果想一次性删除多个field,只能利用Redis的事务来实现。
HEXISTS
最早可用版本:2.0.0
时间复杂度:O(1)
HEXISTS命令用来验证指定的key是否包含指定的field,如果包含,返回1;如果不包含或者key不存在,返回0。
HGET
最早可用版本:2.0.0
时间复杂度:O(1)
返回指定的key中指定的field对应的value。如果field不在key中或者key不存在,则返回nil。
HGETALL
最早可用版本:2.0.0
时间复杂度:O(N),N为hash的大小,即key中field的个数。
返回key所存储的所有field以及field对应的value。每个value跟在field的后面被返回,因此,返回值的长度是hash的size的2倍。如果key不存在,则返回空列表。
127.0.0.1:6379> HGETALL noexist
(empty list or set)
127.0.0.1:6379> HSET mykey field1 "follow"
(integer) 1
127.0.0.1:6379> HSET mykey field2 "Jackeyzhe2018"
(integer) 1
127.0.0.1:6379> HGETALL mykey
1) "field1"
2) "follow"
3) "field2"
4) "Jackeyzhe2018"
复制代码
HINCRBY
最早可用版本:2.0.0
时间复杂度:O(1)
用法:
HINCRBY key field increment
复制代码
用来对指定key的指定field进行增量操作,返回计算后的结果。如果key不存在,或者key中不包含指定的field,则会先创建一个value为0的hash,如果value不是数字类型,则会报错。该命令支持的数字范围是64位有符号整数。
127.0.0.1:6379> keys * #演示使用,生产环境不要用
1) "mykey"
127.0.0.1:6379> HINCRBY myhash field1 1
(integer) 1
127.0.0.1:6379> HGET myhash field1
"1"
127.0.0.1:6379> HSET myhash fieldStr "follow"
(integer) 1
127.0.0.1:6379> HINCRBY myhash fieldStr 1
(error) ERR hash value is not an integer
127.0.0.1:6379> HGETALL myhash
1) "field1"
2) "1"
3) "fieldStr"
4) "follow"
127.0.0.1:6379> HINCRBY myhash field2 2
(integer) 2
127.0.0.1:6379> HGETALL myhash
1) "field1"
2) "1"
3) "fieldStr"
4) "follow"
5) "field2"
6) "2"
复制代码
HINCRBYFLOAT
最早可用版本:2.6.0
时间复杂度:O(1)
用来对指定的key中指定的field进行浮点类型的加法,如果field不存在,则会先创建一个value为0的field。如果value或者increments不能解析为float类型,则会报错。通过下面的例子可以看到,浮点数的加法会存在一些偏差。
127.0.0.1:6379> HINCRBYFLOAT myhash field3 0.3
"0.3"
127.0.0.1:6379> HINCRBYFLOAT myhash field3 1.0e3
"1000.29999999999999999"
127.0.0.1:6379> HINCRBYFLOAT myhash field3 -1.0e3
"0.29999999999999999"
127.0.0.1:6379> HINCRBYFLOAT myhash fieldStr 0.1
(error) ERR hash value is not a float
127.0.0.1:6379> HINCRBYFLOAT myhash field3 "haha"
(error) ERR value is not a valid float
复制代码
HKEYS
最早可用版本:2.0.0
时间复杂度:O(N),其中N为指定key中field的个数
HKEYS命令用于返回指定key中所包含的field列表,如果key不存在,则返回空列表。
HLEN
最早可用版本:2.0.0
时间复杂度:O(1)
返回指定的key所包含的field的个数。如果key不存在,则返回0。
HMGET
最早可用版本:2.0.0
时间复杂度:O(N):N是请求的field的个数
返回指定key中指定的一个或多个field的值。如果field不存在,则返回nil,如果key不存在,同样会返回field数量的nil。因为不存在的key被作为空的hash处理。
127.0.0.1:6379> HMGET myhash field1 field2 no-exist
1) "1"
2) "2"
3) (nil)
127.0.0.1:6379> HMGET no-exist field1 field2
1) (nil)
2) (nil)
复制代码
HMSET
最早可用版本:2.0.0
时间复杂度:O(N):N是需要设置的field的个数
为指定的key设置一个或多个field。如果field已经存在,则会被覆盖。如果指定的key不存在,则会创建一个新的hash。
HSCAN
最早可用版本:2.8.0
时间复杂度:每次请求的时间复杂度为O(1),完成整个迭代的时间复杂度为O(N)
该命令与SCAN命令相似,可以参考我的另外一篇文章Redis命令详解:Keys中对SCAN用法的介绍,如果你想要有更深入了了解,可以看我的另外一篇文章深入理解Redis的scan命令。
HSET
最早可用版本:2.0.0
时间复杂度:O(1)
为指定的key中的field设置value,如果key不存在,则会创建一个新的hash,如果field已经存在,则会覆盖旧值。如果是新增的field,设置完成后会返回1,如果是更新已有的field,设置完成后会返回0。
HSETNX
最早可用版本:2.0.0
时间复杂度:O(1)
同样是为指定的key中的field设置value,与HSET命令不同的是,如果field已经存在,则不会有任何操作,直接返回0。
HSTRLEN
最早可用版本:3.2.0
时间复杂度:O(1)
返回指定key中field对应value的字符串长度,如果key或field不存在,返回0。
HVALS
最早可用版本:2.0.0
时间复杂度:O(N),N为hash的size
返回指定key的hash的所有value。如果key不存在,则会返回空列表。
Redis命令详解:Hashs相关推荐
- Redis命令详解:Connection
最近在学习Redis的相关知识,上一篇我们也介绍了Redis的安装方法和基本数据结构,后面就打算开一个新的系列文章:Redis命令详解.既是对基础的巩固,也是为了以后查询起来更方便. 整个系列会分为以 ...
- redis命令详解与使用场景举例——Server(服务器)
BGREWRITEAOF 执行一个 AOF文件 重写操作.重写会创建一个当前 AOF 文件的体积优化版本. 即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 B ...
- Redis命令详解:Server
Redis命令学习,服务器篇 BGREWRITEAOF 最早可用版本:1.0.0 使Redis重写AOF文件,重写后的AOF文件相较于当前版本的AOF文件占用的空间更小.即使重写失败,数据也不会丢失, ...
- Redis命令详解:Keys
介绍完Redis连接相关命令后,再来介绍一下与Key相关的命令,Redis作为一个key-value数据库,对Key进行操作是无法避免的. DEL 最早可用版本1.0.0 删除指定的键值对,如果指定的 ...
- Redis命令详解:Cluster
前文中我们介绍过了Redis的三种集群方案,没有了解过的同学可以自行前往.今天要介绍的Redis的亲儿子Cluster相关的命令. CLUSTER ADDSLOTS 最早可用版本:3.0.0 时间复杂 ...
- Redis命令详解:Geo
Redis Geo相关命令. GEOADD 最早可用版本:3.2.0 时间复杂度:O(log(N)),N是Sorted set元素数量 用法:GEOADDkey longitude latitude ...
- Redis命令详解:Streams
Redis5.0迎来了一种新的数据结构Streams,没有了解过的同学可以先阅读前文,今天来介绍一下Streams相关的命令. XACK 最早可用版本:5.0.0 时间复杂度:O(1) 用法:XACK ...
- Redis命令详解:Pub/Sub
Redis发布订阅模式相关命令. PSUBSCRIBE 最早可用版本:2.0.0 时间复杂度:O(N),N是已订阅的客户端数. 订阅给定规则的客户端,支持的形式包括: h?llo 订阅hello,ha ...
- Redis命令详解:Transactions
Redis的事务和我们常见的数据库的事务最大的区别就是,Redis的事务中如果有一个命令执行失败,其他命令仍然可以执行成功.Redis的事务以MULTI开始,由EXEC触发.在EXEC前的操作都将被放 ...
最新文章
- Keil 运行.bat脚本文件
- 使用Spring简化JavaMail
- np.nonzero()函数的解析
- 学计算机,怎么入门?
- 加密与安全 - Java加密与安全
- nodejs_NodeJS历险记
- Android 基础 —— 活动的启动模式
- java jar apktool,ShakaApkTool.jar v3.0.0(反编译显示中文的apktool)下载
- vue 表格中有列需要异步加载_Vue中使用async/await解决异步请求问题
- 如何学习C语言,超详细的经验分享(学习笔记1--C语言的基本数据类型)
- primefaces_Primefaces CommandLink
- python多进程编程实例_Python多进程并发(multiprocessing)用法实例详解
- Matlab-杆单元整体刚度矩阵组装(有限元基础-曾攀)
- php特殊字体生成,生成艺术字体图片水印代码_PHP教程
- Ubuntu lightdm无法启动解决办法
- MR混合现实头显来啦!宏碁微软产品率先上市
- Greenplum常用SQL——通过表名查找shema名
- unity3d 音频无缝循环
- JavaWeb学习第二十七天——项目实例
- CSDN博文字体设置 | 字体颜色、大小设置 | 简记 |
热门文章
- 富文本存储型XSS的模糊测试之道
- 我的学生时代之一[小学时代]
- java 多线程两种方式_JAVA多线程实现的两种方式
- ArrayList的使用
- c语言保存后怎么打开文件,保存打开文件之后,怎么也不能在显示函数中出来。。...
- php symbol table,gdb方式遍历EG(symbol_table) 哈希表的key_PHP教程
- c# 批量mqtt_C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)
- html富文本编辑器插件_vue中使用vuequilleditor富文本编辑器
- 域中计算机与用户,域内计算机和用户获取实现vbs代码
- tia v15 添加项目_硬技能,TIA 博途软件界面的介绍