暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis每日一练(19):HINCRBY和HINCRBYFLOAT命令

原创 AlbertS 2019-12-20
2796

版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议

前言

到目前为止学习的散列表的命令都是直接设置和读取对应数据的,今天学习的这个两个命令是用于数值计算的,在散列表中没有和 INCR 、 DECR 对应的命令,也就是说散列表中的字段不能直接自增或自减,只能添加参数来确定增加和减少的数值。

这篇笔记中的2个命令分别是 HINCRBY 、 HINCRBYFLAOT ,可以参考:

HINCRBY

  • 最早出现版本:2.0.0
  • 时间复杂度:O(1)
  • 命令参数: HINCRBY key field increment
  • 操作类型:hashes
  • 官方文档

作用

为散列表中的整数字段值增加或减少一个整数数值,原字段和命令参数都必须是整数,否则会报错,如果指定的字段不存在会先初始化成0,然后再进行增减操作,返回操作后得到的数值。

练习

给一个不存在的字段增加数值20,查看结果后,将该值减小1再查看结果:

127.0.0.1:6379> HGET users:3 age
(nil)
127.0.0.1:6379> HINCRBY users:3 age 20
(integer) 20
127.0.0.1:6379> HGET users:3 age
"20"
127.0.0.1:6379> HINCRBY users:3 age -1
(integer) 19
127.0.0.1:6379> HGET users:3 age
"19"
127.0.0.1:6379>
复制

接着再试下参数或着字段数值不是整数的情况:

127.0.0.1:6379> HGET users:3 age
"19"
127.0.0.1:6379> HINCRBY users:3 age 1.2
(error) ERR value is not an integer or out of range
127.0.0.1:6379> HSET users:3 weight 58.0
(integer) 1
127.0.0.1:6379> HINCRBY users:3 weight 1
(error) ERR hash value is not an integer
127.0.0.1:6379>
复制

当参数不是整数的情况报错 ERR value is not an integer or out of range ,当字段不是整数的时候报错 ERR hash value is not an integer

HINCRBYFLOAT

  • 最早出现版本:2.6.0
  • 时间复杂度:O(1)
  • 命令参数:HINCRBYFLOAT key field increment
  • 操作类型:hashes
  • 官方文档

作用

鉴于 HINCRBY 命令原数据和参数都必须是整数的限制, HINCRBYFLOAT 命令进行了突破,无论整数浮点数都可以进行运算,当指定的字段不存在时会先初始化成0,然后再进行计算。

练习

对散列表一个原本不存在的字段分别增加整数和浮点数,减少整数和浮点数:

127.0.0.1:6379> HGET users:104 weight
(nil)
127.0.0.1:6379> HINCRBYFLOAT users:104 weight 57
"57"
127.0.0.1:6379> HINCRBYFLOAT users:104 weight 1
"58"
127.0.0.1:6379> HINCRBYFLOAT users:104 weight 1.3
"59.299999999999997"
127.0.0.1:6379> HINCRBYFLOAT users:104 weight -2
"57.299999999999997"
127.0.0.1:6379> HINCRBYFLOAT users:104 weight -0.1
"57.199999999999996"
127.0.0.1:6379>
复制

无论参数是整数还是浮点数都可以正常运算,只不过计算浮点数的时候出现了误差。

再试一下原字段类型不是数字的情况:

127.0.0.1:6379> HSET users:101 name albert
(integer) 1
127.0.0.1:6379> HINCRBYFLOAT users:101 name 1
(error) ERR hash value is not a valid float
127.0.0.1:6379>
复制

当操作一个散列表不是数字的字段的时候,会给出该字段不是浮点数的报错,ERR hash value is not a valid float;

总结

  1. HINCRBY 命令可以在原字段为整数的情况下增加或者减少一个整数。
  2. HINCRBYFLAOT 命令在原字段是数字的情况下增加或减少一个数字,可以是整数也可以是浮点数。

2019-12-7 16:28:48

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论