首页 > 数据库 >Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍

时间:2022-11-09 18:32:34浏览次数:48  
标签:HLEN 哈希 HINCRBY 命令 field key 迭代 HSCAN HSTRLEN


HLEN

HLEN key
时间复杂度:O(1)

返回哈希表​​key​​中域的数量。

演示

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_时间复杂度

当哈希表​​key​​不存在时,返回 0。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_迭代_02

HSTRLEN

HSTRLEN key field
可用版本:>= 3.2.0
时间复杂度:O(1)

返回哈希表​​key​​​中给定域​​field​​对应的字符串长度。

演示

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_字符串_03

如果给定的哈希表​​key​​​或者域​​field​​不存在, 那么命令返回 0 。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_时间复杂度_04


Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_迭代_05

HINCRBY

HINCRBY key field increment
可用版本:>= 2.0.0
时间复杂度:O(1)

给哈希表​​key​​​中的域​​field​​​对应的值(可以转换成整数的字符串)加上增量​​increment​​。

演示

哈希表​​key​​​中的域​​field​​对应的字符串不可以转换成整数,HINCRBY命令会报错。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_字符串_06


Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_字符串_07


执行HINCRBY命令之后,命令会返回哈希表​​key​​​中域​​field​​对应的新值。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_字符串_08


如果哈希表​​key​​​中不存在​​域field​​​,那么在执行命令之前,​​域field​​​对应的值会被初始化为​​0​​。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_字符串_09


如果哈希表​​key​​不存在,一个新的哈希表会被创建并执行HINCRBY命令。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_迭代_10


本操作的值被限制在​​64​​位有符号数字表示范围之内。

HINCRBYFLOAT

HINCRBYFLOAT key field increment
可用版本:>= 2.6.0
时间复杂度:O(1)

给哈希表​​key​​​中的域​​field​​​对应的值(可以转换成浮点数的字符串)加上浮点数增量​​increment​​。

演示

如果哈希表​​key​​​中不存在域​​field​​​ ,那么HINCRBYFLOAT命令会先将域​​field​​​的值设为​​0​​,然后再执行加法操作。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_字符串_11


如果哈希表​​key​​​不存在,那么HINCRBYFLOAT命令会先创建一个哈希表,再创建域​​field​​​,并且将域​​field​​​对应的值设为​​0​​ ,最后再执行加法操作。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_迭代_12


哈希表的HINCRBYFLOAT命令和字符串的INCRBYFLOAT命令类似:​​Redis - 字符串INCR、INCRBY、INCRBYFLOAT、DECR、DECRBY命令介绍​​,无论是哈希表​​key​​​中域​​field​​​对应的值还是增量​​increment​​​, 都可以使用像​​5e-1、5e2​​这样的指数符号来表示。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_redis_13


Redis中的整数和浮点数都是以字符串的形式保存,所以它们都属于字符串类型,这点要记住。当哈希表​​key​​​中域​​field​​​对应的值或给定的增量​​increment​​不能转换成双精度浮点数时,HINCRBYFLOAT命令会报错。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_迭代_14


Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_redis_15

HSCAN

HSCAN key cursor [MATCH pattern] [COUNT count]
可用版本: >= 2.8.0
时间复杂度:增量式迭代命令每次执行的复杂度为 O(1) , 对数据集进行一次完整迭代的复杂度为 O(N) , 其中 N 为数据集中的元素数量。

HSCAN命令用于增量式迭代哈希表中的键值对。

选项

  • MATCH :MATCH选项为增量式迭代命令提供一个哈希表中键的模式参数, 让命令只返回和给定模式参数相匹配的键值对, 这一点可以通过在执行增量式迭代命令时, 通过给定​​MATCH <pattern>​​参数来实现,在下面会进行演示。
  • COUNT:COUNT选项的作用就是让用户告知迭代命令, 在每次迭代中应该从数据集里返回多少元素。但COUNT选项只是对增量式迭代命令的一种提示(并不一定会遵守)。COUNT参数的默认值为​​10​​ 。用户可以在每次迭代中按自己的需要随意改变COUNT参数的值, 只要记得将上次迭代返回的游标用到下次迭代里面就可以了。

演示

HSCAN命令是一个基于游标的迭代器,HSCAN命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为HSCAN命令的游标参数, 以此来延续之前的迭代过程。

当HSCAN命令的游标参数被设置为​​0​​​时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为​​0​​的游标时, 表示迭代已结束。

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_时间复杂度_16


Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_时间复杂度_17

hscan hash 0 match key1*

Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍_字符串_18


我这里设置​​count​​参数没有生效。网上给的原因是:

这的确是个坑,HSCAN命令是为了处理大量数据而设计的,可能也是因为这个原因,在数据量较少的情况下,count参数并不会生效,具体阈值是多少并没有实际测验过。

所以这也说明了,COUNT选项只是对增量式迭代命令的一种提示(并不一定会遵守)。

Redis中哈希表的HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令就介绍到这里。

写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!


标签:HLEN,哈希,HINCRBY,命令,field,key,迭代,HSCAN,HSTRLEN
From: https://blog.51cto.com/u_15870611/5837735

相关文章